4 votes

Comment autoriser un service à utiliser le compte utilisateur Microsoft Graph sans interaction avec l'utilisateur ?

Je souhaite que mon application serveur interagisse avec ses propres fichiers Excel en utilisant Microsoft Graph. C'est-à-dire que les fichiers appartiennent à l'application, et non à un utilisateur particulier de l'application.

J'ai enregistré une application avec Azure ID et j'ai accordé l'autorisation "Accès complet à tous les fichiers auxquels l'utilisateur peut accéder" pour Microsoft Graph.

J'essaie d'utiliser OAuth Resource Owner Password Credentials Grant.

Je peux obtenir un jeton d'autorisation comme suit :

POST https://login.microsoftonline.com/common/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=password
&resource=https://graph.microsoft.com
&client_id=<ID of application registered with Azure AD>
&username=<Microsoft username>
&password=<password>&scope=Files.ReadWrite.All

Mais la réponse n'indique que le champ d'application User.Read :

{
  "token_type": "Bearer",
  "scope": "User.Read",
  "expires_in": "3600",
  "ext_expires_in": "0",
  "expires_on": "1494467388",
  "not_before": "1494463488",
  "resource": "https://graph.microsoft.com",
  "access_token": "eyJ0e...",
  "refresh_token": "AQAB..."
}

Et lorsque j'essaie de lister les fichiers dans le One Drive du compte, je n'obtiens pas d'erreur, mais la réponse ne contient aucun élément :

Request:
GET https://graph.microsoft.com/v1.0/me/drive/root/children
Authorization: bearer eyJ0e...

Response:
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('<account ID>')/drive/root/children",
  "value": []
}

Lorsque je fais la même demande dans Graph Explorer en étant connecté avec le même compte, la réponse inclut tous les éléments du disque unique Root de ce compte.

Je comprends que Microsoft Graph ne prend pas actuellement en charge l'accès aux fichiers par l'application seule, lorsqu'il est autorisé via OAuth Client Credentials Grant (selon les instructions pour appeler Microsoft Graph dans un service ), mais comme j'obtiens l'autorisation pour un compte d'utilisateur particulier (et pas seulement pour une application), je m'attendrais à avoir accès aux fichiers de cet utilisateur.

Est-ce que je me trompe, ou est-ce que l'accès aux fichiers n'est pas non plus pris en charge par l'octroi d'informations d'identification par mot de passe du propriétaire des ressources ?

Dans ce dernier cas, comment puis-je permettre à mon application d'utiliser les informations d'identification de l'utilisateur pour manipuler des fichiers Excel via Microsoft Graph sans interaction avec l'utilisateur ?

UPDATE :

J'ai attribué des autorisations d'administrateur au compte que j'utilise et j'ai redéfini les autorisations d'application pour Microsoft Graph dans le portail Azure, mais cela ne fonctionne toujours pas pour moi.

Voici les détails du compte que j'utilise :

enter image description here

1voto

Nan Yu Points 5422

Essayez de cliquer sur Grant Permissions (il est préférable d'utiliser le compte administrateur) dans l'onglet "Autorisations requises" après avoir accordé l'autorisation "Accès complet à tous les fichiers auxquels l'utilisateur peut accéder" pour Microsoft Graph : enter image description here

Après avoir acquis le jeton à l'aide du flux du mot de passe du propriétaire de la ressource, vous trouverez les éléments suivants Files.ReadWrite.All en scp revendications . Ensuite, vous pouvez appeler l'api microsoft graph pour lister les fichiers.

Mise à jour

Voici les étapes à suivre pour faire fonctionner le flux des propriétaires de ressources :

  1. enregistrer une application native, ajouter l'autorisation déléguée "Avoir un accès complet à tous les fichiers auxquels l'utilisateur peut accéder" pour Microsoft Graph (ne pas cliquer sur grant permissions en utilisant le bouton Resource Owner Password Credentials Grant et en obtenant le jeton d'accès. User.Read en scp revendiquer :

    POST https://login.microsoftonline.com/common/oauth2/token Content-Type : application/x-www-form-urlencoded grant_type=password&client_id=XXXXXXXX&resource= https://graph.microsoft.com/&username=XXXXXX&password=XXXXXXX

  2. cliquer grant permissions comme le montre l'image ci-dessus, en utilisant Resource Owner Password Credentials Grant et en obtenant le jeton d'accès, vous pouvez trouver Files.ReadWrite.All User.Read en scp revendiquer :

enter image description here

0voto

jdave Points 437

Le problème est dû aux autorisations de l'API graphique. En effet, comme vous êtes connecté sous un utilisateur spécifique pour Microsoft Graph Explorer, vous pouvez tout voir... car vous vous êtes authentifié en tant que personne unique... la raison pour laquelle vous ne voyez rien, c'est que les autorisations pour l'application seulement ne fonctionnent pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X