2017-08-09 1 views
0

J'essaie d'utiliser OAuth2 pour accéder à une boîte aux lettres Exchange, mais le protocole OAuth me pose problème. Je n'utilise pas de bibliothèque, je fais juste des appels http directs (en utilisant libcurl). J'utilise la documentation trouvée ici:Impossible d'obtenir le jeton d'accès à l'aide d'OAuth2 avec Exchange

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code

J'ai obtenu avec succès le code d'autorisation, maintenant je suis en train de l'utiliser pour obtenir le jeton d'accès. La réponse dans le fichier json renvoyé est "attribution non valide, échec de l'analyseur de données de transmission: le code d'autorisation est incorrect ou incorrect". erreur HTTP 400. Voici l'ensemble du flux que je générer:

Obtenir le code Auth:

Démarrer IE avec cette url:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F&response_type=code&scope=openid+Mail.ReadWrite 

À ce stade, l'utilisateur est présenté avec le Écran de connexion Microsoft. Il entre ses informations d'identification, puis est invité à approuver l'accès aux portées demandées. Il le fait. Ensuite, à l'URL de redirection, nous recevons les données:

https://login.microsoftonline.com/common/oauth2/nativeclient?code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo 

Obtenir jeton:

L'application extrait les données après "code =", puis les messages à l'adresse suivante:

https://login.microsoftonline.com/common/oauth2/token

ces données:

grant_type=authorization_code&client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F 

ce poste entraîne http er ROR 400, et les données renvoyées sont:

{"error":"invalid_grant","error_description":"AADSTS70000: Transmission data parser failure:Authorization Code is malformed or invalid....} 

Quelqu'un peut-il jeter un oeil à ce que je l'ai fait et suggérer où je vais mal? En aparté, j'ai essayé d'exécuter un script Powershell suggéré par Shawn - ce script utilise mon identifiant d'application existant et obtient un code d'authentification et un jeton en utilisant ADAL. Cela a semblé fonctionner, donc je suspecte que le problème est dans mon code, pas la configuration d'application dans Azure.

Répondre

0

Je crois que vous mélangez le point de terminaison Azure Active Directory V2 avec le point de terminaison V1.

Plus précisément, le document que vous avez lié, et dites que vous suivez, est destiné à l'extrémité DAA V1 et utilise les URLS suivantes (comme documenté):

https://login.microsoftonline.com/{tenant}/oauth2/authorize

https://login.microsoftonline.com/{tenant}/oauth2/token

Remarque: Il n'y a pas /v2.0/ dans les URL.

Un autre problème que je vois avec votre demande de jeton est que vous ne spécifiez pas resource. Je crois que c'est nécessaire si vous voulez acquérir un jeton d'accès à une ressource spécifique. Dans le cas d'Exchange Online, vous souhaitez spécifier la ressource https://outlook.office.com/.

Notez que si possible, Office 365 vous suggère d'utiliser Microsoft Graph (https://graph.microsoft.com/) au lieu de l'API Exchange directement. Si cela vous convient, vous devriez probablement utiliser le point de terminaison AAD V2. L'article équivalent pour le point de terminaison V2 comme celui que vous avez répertorié ci-dessus est here. Faites-moi savoir si cela résout vos problèmes.

+0

Merci pour vos commentaires. J'ai essayé les deux points de terminaison, en utilisant les enregistrements que j'ai effectués dans le portail d'inscription des applications et dans Azure Management Portal. Dans mes tests, j'ai effectivement utilisé le point de terminaison non-2.0 avec l'application créée dans le portail Azure. Ne fonctionne toujours pas. J'ai essayé d'ajouter "resource", même si cela est facultatif. Est-ce le genre de problème que je peux obtenir de l'aide si j'ouvre un dossier de support avec Azure? Il y a tellement de pièces mobiles - je pense avoir besoin de conseils approfondis, toute aide appréciée. –

+0

Salut Jeff, si vous avez essayé différentes choses, vous aurez besoin de poster les messages d'erreur spécifiques et les résultats que vous obtenez à ces différentes étapes. Il est difficile d'aider à déboguer votre situation sans ces détails. Si vous pouviez mettre à jour votre message d'origine en utilisant le point de terminaison ** right **, et l'erreur qui en résulterait, cela aiderait beaucoup. Nous devrions également avoir des échantillons complets de bout en bout sur notre [GitHub ici] (https://github.com/azure-samples). –

+0

OK, j'ai modifié le post original pour refléter exactement ce que et où je publie. –