MS Graph API:无效的身份验证令牌

时间:2016-06-17 15:39:23

标签: azure office365 microsoft-graph

我尝试使用Microsoft Graph API在Outlook / O365邮箱中查询邮件。我在Azure门户中registered my app并收到了查询API所需的信息。该应用拥有Mail.Read权限。 (我无法访问Azure门户,我被告知这是以这种方式设置的。)但是,当我从OAuth端点获取令牌时,它在任何后续调用中都不起作用。我现在正在使用Python的请求模块进行测试。

为什么这个电话会失败?我似乎已经传递了所有正确的信息,但我显然遗漏了一些东西。

我通过执行POST来获取令牌:

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

我传递了必要的参数:

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

我收到这样的回复:

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

然而,我尝试使用该令牌,但它对我所称的任何内容都不起作用。我将其作为标题传递:

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

我正在调用此网址:

url = 'https://graph.microsoft.com/v1.0/users/my.email.address@example.com/messages'

具体来说,我用这个:

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

回复是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.'
     }
}

5 个答案:

答案 0 :(得分:16)

在您的登录请求中,资源参数应为https://graph.microsoft.com

答案 1 :(得分:1)

除非您使用Client Credentials,否则您无法访问其他帐户的邮箱。确保my.email.address@example.com与您通过身份验证的帐户相同,并且该地址也是该帐户的userPrincipalName。

您还可以使用简化的URI来请求您的邮件,并绕过使用userPrincipalName来确定帐户/me。在这种情况下,GET请求将为https://graph.microsoft.com/v1.0/me/messages

答案 2 :(得分:1)

我认为你需要在这里注册应用程序" https://apps.dev.microsoft.com"而不是来自Azure门户。

答案 3 :(得分:1)

似乎是这样的,从v1端点发出的令牌对于至少一些使用MS Graph API的请求无效。

而是通过调用https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token来尝试从v2端点获取令牌。

如果您正在使用oidc发现文档,您将在https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration

找到适用于v2的文档

答案 4 :(得分:0)

值得注意的是,即使MS的Azure文档没有指定列出资源的需要,我也无法在没有列出资源的情况下开始工作。

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

有一个补充文件,专门针对MS Graph的双腿Auth实际上使用了示例中的“资源”。

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

快乐狩猎!

相关问题