尝试使用Microsoft Graph API读取Office 365邮件。我可以通过Azure AD(而不是V2)进行身份验证并获取令牌,但我获得的唯一权限是User.Read。我想要Mail.Read。
我在Azure门户中的应用注册包括Mail.Read权限:API" Microsoft Graph",权限"读取用户邮件"。在/authorize
请求中,我同时指定resource
和scope
,后者为https://graph.windows.net/mail.read
。然而,当令牌JSON返回时,它有"scope":"User.Read"
。对https://graph.microsoft.com/v1.0/me/messages
的请求返回错误403,而https://graph.microsoft.com/v1.0/me/
按预期工作。
我错过了什么?
编辑:最初的OAuth URI是:
https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&redirect_uri=https%3a%2f%2fredacted.com%2fgoblin%2fback.aspx&client_id=3b595e3f-aecf-4a8c-8ec3-309810d75783&response_mode=query&scope=https%3a%2f%2fgraph.windows.net%2fmail.read&resource=https%3a%2f%2fgraph.windows.net%2f
JSON:
{
"token_type": "Bearer",
"scope": "User.Read",
"expires_in": "3599",
"ext_expires_in": "0",
"expires_on": "1494364932",
"not_before": "1494361032",
"resource": "https://graph.microsoft.com/",
"access_token": "redacted",
"refresh_token": "redacted",
"id_token": "redacted"
}
答案 0 :(得分:1)
您似乎只需要再次触发同意。
如果您有应用程序,并且更新了应用程序所需的权限,则需要请求用户同意您所需的新权限。
在您的代码中,您应该进行逻辑检查:
if
缺少范围,then
再次提示同意您可以通过将以下查询字符串直接添加到登录网址来提示同意:&prompt=consent
否则,您可以在ADAL中使用PromptBehavior
参数。