我正在尝试使用 Microsoft Graph API 查询 Outlook/O365 邮箱中的邮件。我注册我的应用程序 https://graph.microsoft.io/en-us/docs/authorization/app_only在 Azure 门户中,并收到查询 API 所需的信息。该应用程序有Mail.Read
允许。 (我无权访问 Azure 门户,有人告诉我它是这样设置的。)但是,当我从 OAuth 端点获取令牌时,它在任何后续调用中都不起作用。我现在正在使用Python的requests模块进行测试。
为什么这次调用失败?看起来我正在传递所有正确的信息,但我显然遗漏了一些东西。
我通过执行来获取令牌POST
on:
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/[email protected] /cdn-cgi/l/email-protection/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.'
}
}