webentwicklung-frage-antwort-db.com.de

MS Graph API: Ungültiges Authentifizierungstoken

Ich versuche, die Microsoft Graph-API zum Abfragen eines Outlook/O365-Postfachs nach Nachrichten zu verwenden. Ich habe meine App registriert im Azure-Portal und habe die erforderlichen Informationen zum Abfragen der API erhalten. Die App hat die Berechtigung Mail.Read. (Mir wurde mitgeteilt, dass ich keinen Zugriff auf das Azure-Portal habe.) Wenn ich mein Token vom OAuth-Endpunkt erhalte, funktioniert es bei nachfolgenden Aufrufen jedoch nicht. Ich benutze gerade das Anforderungsmodul von Python zum Testen.

Warum schlägt dieser Anruf fehl? Anscheinend gebe ich alle korrekten Informationen weiter, aber mir fehlt eindeutig etwas.

Ich erhalte das Token, indem ich eine POST für Folgendes durchführe:

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

Ich übergebe die notwendigen Parameter:

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

und ich bekomme eine Antwort wie diese:

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

Ich versuche jedoch, dieses Token zu verwenden, und es funktioniert für nichts, was ich anrufe. Ich übergebe es als Header:

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

Ich rufe diese URL an:

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

Im Einzelnen verwende ich Folgendes:

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

Die Antwort ist ein 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

in Ihrer Anmeldeanforderung sollte der Ressourcenparameter https://graph.Microsoft.com lauten.

15
user2641043

Es scheint der Fall zu sein, dass Token, die vom v1-Endpunkt ausgegeben werden, für mindestens einige Anforderungen mit MS Graph API nicht gültig sind.

Versuchen Sie stattdessen, das Token vom v2-Endpunkt abzurufen, indem Sie https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token aufrufen.

Falls Sie mit oidc-Erkennungsdokumenten arbeiten, finden Sie das für v2 unter https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration.

1
Raphael Z

Wenn Sie nicht Client-Anmeldeinformationen verwenden, können Sie nicht auf die Nachrichten im Postfach eines anderen Kontos zugreifen. Stellen Sie sicher, dass [email protected] dasselbe Konto ist, mit dem Sie sich authentifiziert haben, und dass diese Adresse auch der userPrincipalName für das Konto ist.

Sie können auch einen vereinfachten URI verwenden, um Ihre Nachrichten anzufordern und die Ermittlung des userPrincipalNamedes Kontos mithilfe von /me zu umgehen. In diesem Fall wäre die Anforderung GEThttps://graph.Microsoft.com/v1.0/me/messages

1
Marc LaFleur

Ich denke, Sie müssen die App von hier " https://apps.dev.Microsoft.com " anstelle von Azure Portal registrieren.

1
Xiaomin Wu

Es ist erwähnenswert, dass selbst wenn in der Azure-Dokumentation von MS nicht angegeben ist, dass die Ressource aufgelistet werden muss, ich niemals mit der Arbeit beginnen könnte, ohne die Ressource aufzulisten.

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

Für MS Graph gibt es ein zusätzliches Dokument, das sich auf die zweibeinige Authentifizierung bezieht und in diesem Beispiel die Ressource verwendet.

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

Fröhliches Jagen!

0
Yvan Aquino