web-dev-qa-db-fra.com

API MS Graph: jeton d'authentification non valide

J'essaie d'utiliser l'API Microsoft Graph pour interroger des messages dans une boîte aux lettres Outlook/O365. J'ai enregistré mon application sur le portail Azure et reçu les informations nécessaires pour interroger l'API. L'application dispose de l'autorisation Mail.Read. (Je n'ai pas accès au portail Azure, on m'a dit qu'il avait été configuré de cette façon.) Lorsque je récupère mon jeton depuis le point de terminaison OAuth, il ne fonctionne toutefois dans aucun autre appel. J'utilise actuellement le module de requêtes de Python pour les tests.

Pourquoi cet appel échoue? Il semble que je transmette toute l'information correcte, mais il me manque clairement quelque chose.

Je reçois le jeton en effectuant une POST sur:

https://login.microsoftonline.com/my.domain/oauth2/token

Je passe les paramètres nécessaires:

data = {'grant_type': 'client_credentials', 'client_id': CLIENTID, 'client_secret': SECRET, 'resource': APPURI}

et je reçois une réponse comme celle-ci:

{
    'resource': 'APPURI',
    'expires_in': '3599',
    'ext_expires_in': '3600',
    'access_token': 'TOKENHERE',
    'expires_on': '1466179206',
    'not_before': '1466175306',
    'token_type': 'Bearer'
}

J'essaie d'utiliser ce jeton, cependant, et cela ne fonctionne pas pour tout ce que j'appelle. Je le passe comme en-tête:

h = {'Authorization': 'Bearer ' + TOKEN}

J'appelle cette URL:

url = 'https://graph.Microsoft.com/v1.0/users/[email protected]/messages'

Plus précisément, j'utilise ceci:

r = requests.get(url, headers=h)

La réponse est un 401:

{
    'error': {
        'innerError': {
            'date': '2016-06-17T15:06:30',
            'request-id': '[I assume this should be removed for privacy]'
         },
         'code': 'InvalidAuthenticationToken',
         'message': 'Access token validation failure.'
     }
}
7
vaindil

dans votre demande de connexion, le paramètre de ressource doit être https://graph.Microsoft.com

15
user2641043

Il semble que les jetons issus du noeud final v1 ne soient pas valables pour au moins certaines requêtes avec l'API MS Graph.

Au lieu de cela, essayez d'obtenir le jeton du noeud final v2 en appelant https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token.

Si vous travaillez avec des documents de découverte oidc, vous trouverez celui de v2 à https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration

1
Raphael Z

Sauf si vous utilisez Informations d'identification du client , vous ne pouvez pas accéder aux messages de la boîte aux lettres d'un autre compte. Assurez-vous que [email protected] est le même compte que vous avez authentifié et que cette adresse est également le userPrincipalName pour le compte.

Vous pouvez également utiliser un URI simplifié pour demander vos messages et éviter de déterminer la userPrincipalName du compte à l'aide de /me. Dans ce cas, la demande GET serait https://graph.Microsoft.com/v1.0/me/messages

1
Marc LaFleur

Je pense que vous devrez enregistrer l'application à partir d'ici " https://apps.dev.Microsoft.com " au lieu de à partir du portail Azure.

1
Xiaomin Wu

Il convient de noter que même si la documentation Azure de MS ne spécifie pas la nécessité de répertorier la ressource, je ne pourrais jamais me mettre au travail sans répertorier la ressource.

https://docs.Microsoft.com/en-us/Azure/active-directory/develop/active-directory-v2-protocols-oauth-client-creds .

Il existe un document supplémentaire spécifiant à une authentification à deux branches pour MS Graph qui utilise réellement la "ressource" dans l'exemple.

https://developer.Microsoft.com/en-us/graph/docs/authorization/app_only

Bonne chasse!

0
Yvan Aquino