tengo una llamada axios para obtener el token del portador, es oauth2.0 pero por alguna razón está fallando, la misma llamada está funcionando en cartero.
índice.js
export async function getESLAccessToken(apiConfig: any) { const _body = { grant_type: apiConfig.authOptions.body.grant_type, client_id: apiConfig.authOptions.credentials.sdk_voyage.clientId, client_secret: apiConfig.authOptions.credentials.sdk_voyage.clientSecret, scope: apiConfig.authOptions.body.scope }; const _headers = { "Content-Type": "application/x-www-form-urlencoded", "appName": "Blink", "Accept": "*/*", "Content-Length": 163 }; const request = { method: 'POST', _body, headers: _headers }; try { const resp = await axios.post('https://auth/oauth2/token', request); console.log(resp.data); } catch (err) { // Handle Error Here throw err; } }Así es como se construye la solicitud para axios
{ "method": "POST", "_body": { "grant_type": "client_credentials", "client_id": "abc", "client_secret": "xyz", "scope": "APPPII APPPHI" }, "headers": { "Content-Type": "application/x-www-form-urlencoded", "appName": "Blink", "Accept": "*/*", "Content-Length": 163 } }Error
Error: Request failed with status code 400Solicitud y respuesta de trabajo del cartero
POST https://auth/oauth2/token 200 163 ms POST /auth/oauth2/token HTTP/1.1 Headers User-Agent: PostmanRuntime/7.26.8 Accept: */* Cache-Control: no-cache Postman-Token: d90ccc33-1d77-4502-9a41-74080dd3d7a5 Host: qaapih8.corp.cvscaremark.com Accept-Encoding: gzip, deflate, br Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 163 Request Body grant_type=client_credentials&client_id=abc&client_secret=xyz&scope=APPPII%20APPPHI HTTP/1.1 200 OKCuerpo de respuesta
{ "token_type":"Bearer", "access_token":"token returned", "expires_in":3600, "consented_on":164684, "scope":"APPPII APPPHI" }El segundo argumento de la función axios.post debe ser el cuerpo de la solicitud. Y el tercer argumento debe ser el objeto de configuración de solicitud de Axios (que puede configurar sus encabezados). Solicitudes POST de Axios
En tu caso, el código debería ser como:
const body = { grant_type: apiConfig.authOptions.body.grant_type, client_id: apiConfig.authOptions.credentials.sdk_voyage.clientId, client_secret: apiConfig.authOptions.credentials.sdk_voyage.clientSecret, scope: apiConfig.authOptions.body.scope }; const myHeaders = { // add your headers here } const response = await axios.post( 'https://auth/oauth2/token', body, { headers: myHeaders } );Reemplazar
const request = { method: 'POST', _body, headers: _headers };con:
const request = { method: 'POST', data: _body, headers: _headers };Como lo señalaron los documentos en la sesión de comentarios: https://axios-http.com/docs/req_config