Azure多租户应用程序无法使用新定义的范围获取令牌

时间:2018-01-25 20:50:38

标签: azure oauth-2.0 azure-active-directory microsoft-graph azure-ad-graph-api

我正在开发一个Azure多租户应用程序,该应用程序使用Microsoft Graph API和Windows Azure Active Directory资源中的作用域。我们正在使用 v1 OpenID身份验证代码流。

最近我们向Microsoft Graph API添加了一些请求的范围,我们在prompt=admin_consent交换机上使用resource=https://graph.microsoft.com/common/oauth2/token提示用户重新提交。

当提示用户再次接受范围时,您可以看到新请求的范围,并且呼叫似乎成功完成,我们收到新的access_token

但是,响应中返回的范围和嵌入式JWT对范围的声明仅列出了请求范围的一小部分,它们似乎也只来自其中一个资源(Windows Azure Active Directory)。

我们正在接收新范围的403s,因此我认为这不是正确填充这些范围字段的问题。

有谁知道为什么auth流不会返回带有新请求范围的令牌?

以下列出了我要求的范围:

Windows Azure Active Directory

  • 读取和写入目录数据(应用程序)
  • 以登录用户(委派)
  • 的身份访问目录
  • 读取和写入目录数据(委派)
  • 登录并阅读用户个人资料(已委派)

Microsoft Graph

  • 在所有邮箱中读取和写入日历(应用程序)(新)
  • 读写所有用户'完整档案(申请)
  • 读取和写入目录数据(应用程序)
  • 以任何用户身份发送邮件(应用程序)(新)

Scopes Accept Page

谢谢!

1 个答案:

答案 0 :(得分:1)

当您通过指定特定资源对AAD v1发出令牌请求时,返回的访问令牌将仅包含访问该特定资源所需的范围。协议的详细信息和示例记录在案here

因此,如果您需要访问两个资源,则需要为每个资源请求访问令牌,相应的令牌将包含特定于该资源的范围。

在这种情况下,如果AAD Graph范围在MS Graph中可用,您可以在MS Graph下合并它们并为MS Graph请求单个标记。在身份验证流程中,您可以通过在参数here的说明中提到的身份验证请求的scope字段中指定这些范围来控制您要请求同意的范围。