【发布时间】:2018-07-05 05:20:42
【问题描述】:
我正在开发一个 Azure 多租户应用程序,它使用来自 Microsoft Graph API 和 Windows Azure Active Directory 资源的范围。我们正在使用 v1 OpenID 身份验证代码流。
最近我们向 Microsoft Graph API 添加了更多请求的范围,我们提示用户在我们的 /common/oauth2/token 交换中使用 prompt=admin_consent 和 resource=https://graph.microsoft.com 重新验证。
当提示用户再次接受范围时,您可以看到新请求的范围并且调用似乎成功完成,我们收到一个新的access_token。
但是,响应中返回的范围和针对范围的嵌入式 JWT 声明仅列出了所请求范围的一小部分,而且它们似乎也仅来自其中一个资源(Windows Azure Active Directory)。
我们收到了新范围的 403,所以我认为这不是没有正确填充这些范围字段的问题。
有人知道为什么身份验证流程不会返回具有新请求范围的令牌吗?
这里列出了我要求的范围:
Windows Azure 活动目录
- 读写目录数据(应用)
- 以登录用户身份访问目录(委托)
- 读写目录数据(委托)
- 登录并阅读用户个人资料(委托)
微软图形
- 在所有邮箱中读取和写入日历(应用程序)(新)
- 读取和写入所有用户的完整个人资料(应用程序)
- 读写目录数据(应用)
- 以任何用户身份发送邮件(应用程序)(新)
谢谢!
【问题讨论】:
-
当您请求 ID 令牌时,您是在请求特定资源还是将其留空?在对普通用户进行测试之前,您是否让管理员通过了管理员同意流程?
-
我们没有在
/common/oauth2/authorize上指定资源,但我们在/common/oauth2/token调用上发送resource=https://graph.microsoft.com(如果没有指定,我们会从端点获得400)。是的,我们有用户在下次登录时使用prompt=admin_consent重新认证。 -
prompt=admin_consent强制执行管理员同意流程,prompt=consent用于强制用户同意。它们是不同的东西。你试过prompt=consent吗? -
如果我请求应用程序范围,以便离线使用它们,我希望管理员正确地接受这些范围?
-
我尝试使用
prompt=consent而不是prompt=admin_consent。原来的问题没有区别。新的作用域仍然没有出现在响应正文和 JWT 令牌中。
标签: azure oauth-2.0 azure-active-directory microsoft-graph-api azure-ad-graph-api