azure - 如何获取当前登录用户的 Azure AD 组,而不需要域管理员向我的应用程序授予任何权限?

标签 azure azure-active-directory microsoft-graph-api

更具体地说:我有一个小型 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.ReadGroup.Read.All

这让我有点陷入困境。理想情况下,我更愿意在所有情况下使用图形 API,而不仅仅是 200 多个情况,因为否则,尽管微软设置了限制,我的 token 对于某些用例来说可能会变得太大。但我不确定这里的实际意图是什么此类查询需要管理员同意。

大家还有其他想法吗?

最佳答案

如果没有 Azure AD 目录管理员同意委派权限Directory.Read.All,目前(2019 年 3 月 20 日)无法获取登录用户的组成员身份信息。 (有计划支持此场景的较低特权权限,尽管默认情况下可能仍需要管理员同意。)

您不应假设所有用户都能够使用您的应用来构建您的应用,因为您仅请求默认情况下当前用户同意的权限。许多组织完全禁用用户同意,您可以预期,将来哪些用户可以同意哪些权限将会因每个组织而发生变化。

我的建议如下:

  1. 在让用户登录之前,请澄清其组织的政策可能不允许他们登录(如果是这种情况,建议他们联系 IT 团队)。 (将来,对于遇到“抱歉,您无权同意”错误的用户,将会有更多选择...)
  2. 考虑从请求User.Read(和组声明)开始,并且仅“逐步提升”到Directory.Read.All稍后在应用程序的体验中。这将增加用户至少能够登录的可能性(尽管不能保证),并且可以让您为他们提供更好的指导,了解如何要求他们的 IT 团队审核您的应用。

有一些额外的指导:https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#using-the-admin-consent-endpoint

关于azure - 如何获取当前登录用户的 Azure AD 组,而不需要域管理员向我的应用程序授予任何权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269300/

相关文章:

azure - 将 AAD 管理角色分配给 AAD 组

azure - 如何延长 Microsoft Graph 访问 token 过期时间?

microsoft-graph-api - SharePoint REST API 与 Microsoft Graph API;推荐的方法是什么?

c# - 在 Linux 应用服务上为 IdentityServer4 提供 key

Azure 数据工厂 sFTP 保持连接打开

azure - VS 2015 : The specified path, 文件名或两者都太长

c - Paho MQTT C 客户端与 Beaglebone Black 上的 azure IoT-Hub 连接

c# - 使用 ADAL 检测到 multiple_matching_tokens_detected

azure - 使用 Xamarin Forms 通过自签名证书向 Azure AD 进行身份验证

azure - Microsoft Graph API,有应用程序权限请求时需要区域