使用MS Graph API的Azure AD无法授予我的应用Mail.Read

时间:2017-05-09 20:32:06

标签: office365 azure-active-directory microsoft-graph office365api azure-ad-graph-api

尝试使用Microsoft Graph API读取Office 365邮件。我可以通过Azure AD(而不是V2)进行身份验证并获取令牌,但我获得的唯一权限是User.Read。我想要Mail.Read。

我在Azure门户中的应用注册包括Mail.Read权限:API" Microsoft Graph",权限"读取用户邮件"。在/authorize请求中,我同时指定resourcescope,后者为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"
}

1 个答案:

答案 0 :(得分:1)

您似乎只需要再次触发同意。

如果您有应用程序,并且更新了应用程序所需的权限,则需要请求用户同意您所需的新权限。

在您的代码中,您应该进行逻辑检查:

  • if缺少范围,then再次提示同意

您可以通过将以下查询字符串直接添加到登录网址来提示同意:&prompt=consent

否则,您可以在ADAL中使用PromptBehavior参数。