2017-09-07 1 views
1

Est-il possible d'accéder à l'API Microsoft Graph à l'aide d'un jeton d'accès obtenu via Azure Active Directory 1.0 Endpoint avec le flux Client Credentials OAuth 2?Appel de l'API Microsoft Graph à l'aide du flux Azure AD 1.0 Endpoint Client Credentials

Par exemple:

POST https://login.microsoftonline.com/{mytenant}.onmicrosoft.com/oauth2/token 
grant_type=client_credentials, 
client_id={app id registered in azure portal}, 
client_secret={registered app key}, 
resource=https://graph.microsoft.com 

Lorsque j'utilise le jeton renvoyé de cette demande, je reçois l'erreur suivante en essayant d'appeler https://graph.microsoft.com/v1.0/groups.

Decoded JWT

tête

{ 
    "typ": "JWT", 
    "alg": "RS256", 
    "x5t": "HHByKU-0DqAqMZh6ZFPd2VWaOtg", 
    "kid": "HHByKU-0DqAqMZh6ZFPd2VWaOtg" 
} 

Payload

{ 
    "aud": "00000002-0000-0000-c000-000000000000", 
    "iss": "https://sts.windows.net/{tenant id}/", 
    "iat": 1504804880, 
    "nbf": 1504804880, 
    "exp": 1504808780, 
    "aio": "Y2FgYDiiO8/s3smXRdxLg87zBPRNAwA=", 
    "appid": "{client id}", 
    "appidacr": "1", 
    "idp": "https://sts.windows.net/{tenant id}/", 
    "oid": "{enterprise app object id}", 
    "sub": "{enterprise app object id}", 
    "tenant_region_scope": "NA", 
    "tid": "{tenant id}", 
    "uti": "uIzrJNpHcEGXoQ4ZKZgqAA", 
    "ver": "1.0" 
} 

{ 
    "error": { 
    "code": "InvalidAuthenticationToken", 
    "message": "Access token validation failure.", 
    "innerError": { 
     "request-id": "3537d28e-a061-4430-aef5-4a75bf791d90", 
     "date": "2017-09-07T16:38:26" 
    } 
    } 
} 

J'ai assuré l'application dispose des autorisations appropriées affectées par le portail. Sous Autorisations requises> Autorisations d'application, "Lire et écrire tous les groupes" est sélectionné.

Azure Portal Permissions

Est-ce que je suis absent ou est-ce pas possible?

+0

Pouvez-vous vérifier le JWT dans un service comme https://jwt.io et assurez-vous qu'il contient la revendication * roles * avec la permission nécessaire? – juunas

+0

Il ne semble pas y avoir de rôles répertoriés dans le JWT. Dans ce cas, y a-t-il quelque chose que je dois ajouter à ma demande? – dallasg

+1

Avez-vous appuyé sur le bouton * Autoriser les autorisations * à l'endroit où vous avez configuré les exigences d'autorisation pour l'application? Et aussi, assurez-vous que c'était l'API Microsoft Graph pour laquelle vous avez demandé les autorisations. – juunas

Répondre

2

Dans votre jeton JWT, la valeur Audience (aud) est incorrecte.

Si vous essayez d'appeler https://graph.microsoft.com ou tout c'est API, vous avez besoin d'un jeton à la demande aud de https://graph.microsoft.com ou 00000003-0000-0000-c000-000000000000.

Le jeton que vous avez est pour l'API graphique DAA, https://graph.windows.net00000002-0000-0000-c000-000000000000 a.k.a.

Bien que ces deux ressources sont similaires dans les deux URL et la forme GUID, ils sont des identités complètement distinctes. Vous devez confirmer dans votre code que vous spécifiez la valeur de ressource correcte lors de la récupération de votre jeton d'accès. Votre petit exemple ci-dessus implique que vous le faites correctement, mais le jeton montre que vous ne l'êtes pas.

+0

Vous avez raison. J'envoyais _scope = https: //graph.microsoft.com_, pas _resource = https: //graph.microsoft.com_ comme je l'avais dit. Je jure que je l'avais déjà essayé dans les deux sens, mais ça marche maintenant. Cela aurait pu être que je n'avais pas essayé de cette façon après avoir cliqué sur _Grant permissions_ jusqu'à maintenant. Je vous remercie. – dallasg

+0

Je suis content que cela a résolu votre problème. N'hésitez pas à accepter ma réponse comme la bonne réponse afin que les autres puissent savoir que ce problème est résolu. –