2017-06-28 3 views
0

Je tente d'intégrer Azure AD login et Graph API sur mon site Web angular2.ADAL.js - Obtention du jeton d'accès Microsoft Graph avec id_token

J'ai mis en œuvre avec succès une connexion ADAL et rediriger, construit autour d'un blog utile here

A partir de ce que je récupérai un paramètre id_token que mon adalservice peut accéder. Actuellement, cela se fait à travers un simple context.login() et en attrapant le jeton dans la redirection. Lorsque j'utilise ce jeton pour essayer d'accéder à Microsoft Graph, la réponse InvalidAuthenticationToken indique Access Token validation failure.

API call with obtained "access_token"

Je suis nouveau à ce genre de choses, alors il se pourrait que mon appel est intrinsèquement mauvais, ou que je manque certaines autorisations dans AD, ou mon application reg n'a pas les autorisations. J'ai vu que j'ai potentiellement besoin de demander un jeton d'accès avec une portée suffisante, mais je peux trouver des exemples de cela.

Quelqu'un at-il utilisé cette bibliothèque adalService pour obtenir des jetons à utiliser avec l'API graphique?

+0

Pourriez-vous indiquer les étendues que vous utilisez et le JSON que vous récupérez à partir de la demande de jeton initiale? –

+0

Ceci est lié, et peut être un moyen alternatif de faire ce que vous cherchez: https://stackoverflow.com/questions/42551153/how-can-i-authenticate-to-aad-and-call-the-graph -api-as-a-native-client-applicat –

+0

@ MarcLaFleur-MSFT Mon erreur n'appelait pas acquireToken pour obtenir un token pour la portée api du graphe. Je suis maintenant en mesure d'obtenir un jeton de travail et d'interroger l'API. Merci – JonnyKnottsvill

Répondre

2

J'ai trouvé une solution à mon problème.

J'utilisais le mauvais jeton. J'ai dû acquérir un jeton spécifiquement pour l'API graphique. Cela signifie que je dois d'abord vous connecter puis appelez this.context.acquireToken() comme ci-dessous:

this.context.acquireToken("https://graph.microsoft.com", function (error, id_token) { 

    if (error || !id_token) { 
     console.log('ADAL error occurred: ' + error); 
    } 
    else { 
      this.graphAccessToken = id_token; 
      //Call graph API 
    } 
    }.bind(this) 
); 

Il semble que il est essentiel que ce processus ont 2 appels. Peut-être que quelqu'un peut faire la lumière sur si je peux obtenir immédiatement un jeton avec une portée pour l'API graphique lors de la connexion. Peut-être en définissant les autorisations requises pour l'application dans Azure AD.

+1

Vous avez découvert le modèle correct! Login() obtenir un jeton d'identification et "se connecter" à l'utilisateur, alors il est essentiel d'appeler acquitToken() pour obtenir un jeton d'accès pour une ressource. Il y a des plans pour que la prochaine version d'adal.js ait une surcharge de acquireToken une demande interactive. Cela signifie que vous pouvez contourner l'appel de connexion! Surveillez la sortie sur [Github] (https://github.com/AzureAD/azure-activedirectory-library-for-js) –

+0

Je sais que cela peut sembler stupide, Erreur: Ne peut correspondre à aucune route URL Segment: 'access_token' La condition if renvoie 'Erreur ADAL survenue: l'opération de renouvellement de la carte a échoué en raison du timeout' Avez-vous des suggestions pour moi? ? – AuroMetal