Estoy tratando de enviar una solicitud a la API de Schoology , pero recibo un error 401, lo que significa que mis encabezados de autenticación son incorrectos (creo).
Estoy usando Axios para enviar la solicitud de esta manera:
function getUsers(headers) { axios.get('https://api.schoology.com/v1/users', { headers: headers }).then(data => { console.log(data); }).catch(err => { console.error(err) }) }Y estoy llamando a esta función en otro archivo como este:
const schoologyHeaders = { "Accept": "application/json", "Host": "api.schoology.com", "Content-Type": "application/json", "Authorization": { "realm": "Schoology API", "oauth_consumer_key": process.env.SCHOOLOGY_CONSUMER_KEY, "oauth_token": "", "oauth_nonce": uuidv4(), "oauth_timestamp": Math.floor(Date.now()/1000).toString(), "oauth_signature_method": "PLAINTEXT", "oauth_version": "1.0", "oauth_signature": process.env.SCHOOLOGY_CONSUMER_SECRET + "%26" } } schoology.getUsers(schoologyHeaders) Creo que todos mis encabezados se ajustan al esquema establecido en el enlace anterior en la sección OAuth Types - Two-Legged , pero sigo recibiendo este error 401.
¿Cómo debo hacer para depurar esto? No pude encontrar mucho en el error en sí para ayudarme a superar esto, y he comprobado varias veces que mis encabezados siguen lo que se establece en la documentación de la API. ¿Podría el nonce o la marca de tiempo ser el problema? ¡Cualquier ayuda es apreciada!
Nota:
oauth_tokense deja intencionalmente en blanco según el esquema de encabezado de autenticación de dos patas en el enlace anterior
Pude resolver este problema reformateando el encabezado de Autorización para que fuera una cadena en lugar de un objeto:
const schoologyHeaders = { "Host": "api.schoology.com", "Content-Type": "application/json", "Authorization": `OAuth realm="Schoology API", oauth_consumer_key="${process.env.SCHOOLOGY_CONSUMER_KEY}", oauth_token="", oauth_nonce="${uuidv4()}", oauth_timestamp="${Math.floor(Date.now()/1000).toString()}", oauth_signature_method="PLAINTEXT", oauth_version="1.0", oauth_signature="${process.env.SCHOOLOGY_CONSUMER_SECRET}%26"`, }