更具体地说:我有一个小型 Azure AD,我在其中注册了我的应用程序。该应用程序被标记为 Multi-Tenancy ,因为我希望人们能够使用自己的公司帐户登录它。我想通过利用不需要管理员同意的委派访问权限来获取登录用户的组成员身份,因为我不希望新 AAD 租户的入职流程要求管理员在那里授予我的应用程序特殊权限权限。
这是我尝试过的:
直接在 token 中获取信息
通过将我的应用程序 list 中的 groupMembershipClaims
字段配置为 All
,如文档 here 所示。我可以获取我的 token 中的组。这可以在没有任何管理员同意的情况下完成。事实上,唯一需要的委托(delegate)权限是 openid
即用户登录。
但是,这种方法限制我获取少于 200 个组的用户的组。否则我什么也得不到,而是获得一个 Azure Graph API 的端点,我可以在其中检索它们。
这引导我们采用第二种方法。
使用 Microsoft Graph API
可悲的是,旧 Azure Graph API和新 Microsoft Graph API似乎需要管理员同意的权限才能获取组。
user: getMemberGroups 的文档调用表明我们应该能够使用委派的 User.Read 权限来进行此调用。然而,这不起作用,事实上 Directory.Read.All
是实际有效的最不宽松的权限。请参阅文档 issue on GitHub .
查看文档的历史记录,我们可以看到这曾经被视为 known bug而不是文档问题。进一步回顾似乎意味着至少需要同时使用 User.Read
和 Group.Read.All
。
这让我有点陷入困境。理想情况下,我更愿意在所有情况下使用图形 API,而不仅仅是 200 多个情况,因为否则,尽管微软设置了限制,我的 token 对于某些用例来说可能会变得太大。但我不确定这里的实际意图是什么此类查询需要管理员同意。
大家还有其他想法吗?
最佳答案
如果没有 Azure AD 目录管理员同意委派权限Directory.Read.All,目前(2019 年 3 月 20 日)无法获取登录用户的组成员身份信息。 (有计划支持此场景的较低特权权限,尽管默认情况下可能仍需要管理员同意。)
您不应假设所有用户都能够使用您的应用来构建您的应用,因为您仅请求默认情况下当前用户同意的权限。许多组织完全禁用用户同意,您可以预期,将来哪些用户可以同意哪些权限将会因每个组织而发生变化。
我的建议如下:
- 在让用户登录之前,请澄清其组织的政策可能不允许他们登录(如果是这种情况,建议他们联系 IT 团队)。 (将来,对于遇到“抱歉,您无权同意”错误的用户,将会有更多选择...)
- 考虑从仅请求User.Read(和组声明)开始,并且仅“逐步提升”到Directory.Read.All稍后在应用程序的体验中。这将增加用户至少能够登录的可能性(尽管不能保证),并且可以让您为他们提供更好的指导,了解如何要求他们的 IT 团队审核您的应用。
关于azure - 如何获取当前登录用户的 Azure AD 组,而不需要域管理员向我的应用程序授予任何权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269300/