1

Essayez d'utiliser l'API Microsoft Graph pour lire le courrier Office 365. Je peux m'authentifier via Azure AD (pas V2) et obtenir un jeton, mais la seule permission que je reçois est User.Read. Je veux Mail.Read.Azure AD avec l'API MS Graph, ne peut pas accorder mon application Mail.Read

L'inscription de mon application sur le portail Azure inclut une autorisation Mail.Read: API «Microsoft Graph», autorisation «Read user mail». Dans la demande /authorize, je spécifie à la fois resource et scope, ce dernier étant https://graph.windows.net/mail.read. Pourtant, lorsque le jeton JSON revient, il a "scope":"User.Read". Et la demande à https://graph.microsoft.com/v1.0/me/messages renvoie l'erreur 403, tandis que https://graph.microsoft.com/v1.0/me/ fonctionne comme prévu.

Qu'est-ce qui me manque?

EDIT: l'URI OAuth initiale est:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&redirect_uri=https%3a%2f%2fredacted.com%2fgoblin%2fback.aspx&client_id=3b595e3f-aecf-4a8c-8ec3-309810d75783&response_mode=query&scope=https%3a%2f%2fgraph.windows.net%2fmail.read&resource=https%3a%2f%2fgraph.windows.net%2f

Le JSON va:

{ 
    "token_type": "Bearer", 
    "scope": "User.Read", 
    "expires_in": "3599", 
    "ext_expires_in": "0", 
    "expires_on": "1494364932", 
    "not_before": "1494361032", 
    "resource": "https://graph.microsoft.com/", 
    "access_token": "redacted", 
    "refresh_token": "redacted", 
    "id_token": "redacted" 
} 
+0

Pourriez-vous ajouter l'URI que vous utilisez pour lancer le flux de travail OAUTH ainsi que la sortie JSON réelle renvoyée? –

Répondre

1

Il semble que vous avez simplement besoin de déclencher à nouveau le consentement.

Si vous avez une application et que vous mettez à jour les autorisations requises par l'application, vous devrez demander à l'utilisateur de consentir aux nouvelles autorisations dont vous avez besoin.

Dans votre code, vous devriez avoir un contrôle logique qui dit:

  • if manquant champ, then prompt consentement à nouveau

Vous pouvez demander le consentement en ajoutant la chaîne de requête suivante directement à l'adresse de connexion: &prompt=consent

Sinon, vous pouvez utiliser le paramètre PromptBehavior dans ADAL.

+0

Avec les applications de single-tenant c'est toujours assez simple, devient un peu plus difficile dans multi-tenant :) – juunas