Office365 带有MS Graph API的Azure广告,可以';我不允许我的应用程序发送邮件。请阅读

Office365 带有MS Graph API的Azure广告,可以';我不允许我的应用程序发送邮件。请阅读,office365,azure-active-directory,microsoft-graph-api,office365api,azure-ad-graph-api,Office365,Azure Active Directory,Microsoft Graph Api,Office365api,Azure Ad Graph Api,正在尝试使用Microsoft Graph API读取Office 365邮件。我可以通过Azure AD(不是V2)进行身份验证并获得令牌,但我获得的唯一权限是User.Read。我要邮件。阅读 我在Azure门户中的应用注册包括邮件。读取权限:API“Microsoft Graph”,权限“读取用户邮件”。在/authorize请求中,我指定了资源和范围,后者是https://graph.windows.net/mail.read。然而,当令牌JSON返回时,它有“作用域”:“User.Re

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

我在Azure门户中的应用注册包括邮件。读取权限:API“Microsoft Graph”,权限“读取用户邮件”。在
/authorize
请求中,我指定了
资源
范围
,后者是
https://graph.windows.net/mail.read
。然而,当令牌JSON返回时,它有
“作用域”:“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&响应模式=查询和范围=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"
}

看起来你只需要再次触发同意

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

在代码中,您应该有一个逻辑检查,说明:

  • 如果
    缺少范围,
    再次提示同意
您可以通过将以下查询字符串直接添加到登录url来提示同意:
&prompt=approve


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

您可以添加用于启动OAUTH工作流的URI以及返回的实际JSON输出吗?对于单租户应用程序,这仍然非常简单,在多租户应用程序中变得有点困难:)