Actualmente puedo usar Postman para recuperar un "token de acceso", pero estoy tratando de replicar esto en ajax (con el fin de jugar con algunas cosas en jsfiddle)
Así que en Postman, tengo:
Si ejecuto eso, obtengo una respuesta que contiene mi access_token:
Estoy tratando de replicar esto en ajax y después de un poco de ayuda aquí pude crear el siguiente script:
$.ajax({ type: 'POST', url: 'https://login.microsoftonline.com/***/oauth2/token', data: JSON.stringify({ grant_type: 'client_credentials', client_id: '***', client_secret: '***', resource: 'https://analysis.windows.net/powerbi/api' }), success: data => { console.log(data.access_token) }, error: (xhr, textStatus, error) => { console.log('rr', error) } });Esto devuelve un error cada vez en la consola:
Siento que estoy cerca pero no puedo entenderlo
Su POST está x-www-form-urlencoded pero sus datos ajax son una cadena json .
Cuando los datos se pasan como una cadena, ya deberían estar codificados con la codificación correcta para contentType , que de forma predeterminada es application/x-www-form-urlencoded .
Cuando los datos son un objeto, jQuery genera la cadena de datos a partir de los pares clave/valor del objeto, a menos que la opción processData se establezca en falso. Por ejemplo, { a: "bc", d: "e,f" } se convierte en la cadena "a=bc&d=e%2Cf". Si el valor es una matriz, jQuery serializa varios valores con la misma clave según el valor de la configuración tradicional (descrito a continuación). Por ejemplo, { a: [1,2] } se convierte en la cadena "a%5B%5D=1&a%5B%5D=2" con la configuración predeterminada tradicional: falso.
https://api.jquery.com/jquery.ajax/
Así que intente eliminar JSON.stringify y simplemente pase el POJO. p.ej
$.ajax({ type: 'POST', url: 'https://login.microsoftonline.com/***/oauth2/token', data: { grant_type: 'client_credentials', client_id: '***', client_secret: '***', resource: 'https://analysis.windows.net/powerbi/api' }, success: data => { console.log(data.access_token) }, error: (xhr, textStatus, error) => { console.log('rr', error) } });