Azure 多租户应用程序未获得具有新定义范围的令牌

Azure mulit-tenant application not getting tokens with newly defined scopes

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

最近我们向 Microsoft Graph API 添加了更多请求的范围,我们提示用户在我们的 /common/oauth2/token 交换中使用 prompt=admin_consentresource=https://graph.microsoft.com 重新授权。

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

然而,响应中返回的范围和嵌入式 JWT 范围声明仅列出了所请求范围的一小部分,而且它们似乎也仅来自其中一个资源(Windows Azure Active目录)。

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

有谁知道为什么身份验证流程不会 return 具有新请求范围的令牌?

这里列出了我请求的范围:

Windows Azure 活动目录

微软图表

谢谢!

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

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

在这种情况下,如果 AAD Graph 范围在 MS Graph 中可用,您可以将它们合并到 MS Graph 下并为 MS Graph 请求单个令牌。在身份验证流程中,您可以通过在参数 here.[=13 的描述中提到的身份验证请求的 scope 字段中指定它们来控制您想要请求同意的范围=]