Interactuar con OneDrive a través de la API de Microsoft Graph usando Access Token

Sep 14 2020

Soy un novato en la API de Microsoft Graph y estoy intentando acceder a One Drive a través de una API de NodeJS. He hecho lo siguiente para obtener el token de acceso de la API Graph para acceder a mi One Drive sin que el usuario tenga que iniciar sesión cada vez que quiera acceder a algo en mi disco.

const postData = {
  client_id: 'xxxxxxxxxxxxxxxxxxx',
  scope: 'https://graph.microsoft.com/.default',
  client_secret: 'xxxxxxxxxxxxxxxxxxx',
  grant_type: 'client_credentials'
};

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// Get  access token and assign it to the token variable
axios
  .post('https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxx/oauth2/v2.0/token', qs.stringify(postData))
  .then(response => {
    token = response.data.access_token;
  }).catch(error => {
    console.log(error);
  });

Mi API está obteniendo el token con éxito. Sin embargo, recibo errores cuando intento acceder a mi One Drive usando este token con el punto final que se proporciona en la documentación. El código es el siguiente:

const AuthStr = 'Bearer ' + token;

axios.get('https://graph.microsoft.com/v1.0/drive/root/children', { headers: { Authorization: AuthStr } }).then(response => {
    console.log(response);
}).catch((error) => {
    console.log(error);
});

¿Qué estoy haciendo mal?

Respuestas

1 HuryShen Sep 14 2020 at 07:29

Solo necesita usar la URL de la siguiente manera:

https://graph.microsoft.com/v1.0/users/{userid}/drive/root/children

Especifique el ID de usuario en la URL porque el token de acceso del flujo de concesión client_credentials no contiene la identidad del usuario.