azure-active-directory - 企业应用程序中基于组角色的授权

我已使用 Azure 应用注册来注册我的应用。在 list 中,我添加了 appRoles。然后我使用 Azure Enterprise 应用程序将用户和组添加到我创建的 appRoles。我是否需要更新 list 中的“groupMembershipClaims”:“SecurityGroup”,因为我在企业应用程序中添加了组?我可以在企业应用程序中对组使用基于角色的声明吗?

最佳答案

您可能会在这里混淆两个完全不同的概念。我将在下面提供有关每一项的一些详细信息,然后您可以决定您的申请是否真的需要集体 claim 。

我猜你对角色声明感兴趣,所以你不需要更新你的应用程序 list 来包含 "groupMembershipClaims": "SecurityGroup",但你是最好的判断者您的应用程序的要求。

应用角色

您可以通过编辑应用程序 list 和添加 appRoles 来定义应用程序角色。现在,您可以将这些角色分配给单个用户,甚至分配给 Azure AD 组。

  • 为单个用户分配角色

    您可以通过转到企业应用程序然后使用门户 UI 将角色分配给各个用户。看起来您已经为您的应用完成了此操作。当用户登录到您的应用程序时,传入的访问 token 包含用户的角色声明。例如“角色”:[“MyAppCustomRole1”]

  • 为 Azure AD 组分配角色

    您可以将应用程序角色分配给 Azure AD 组(如果您有 Azure AD Premium)。这在处理大量用户时尤其方便。这样您就不需要将 appRole 分配给单个用户,而是可以根据他们的组成员资格进行批量分配。

    如果这是您要执行的操作,则无需更新您的应用 list 以包含 "groupMembershipClaims": "SecurityGroup"

示例代码 - Authorization in a web app using Azure AD application roles & role claims

Microsoft 文档 - Application roles

团体声明

您可以通过编辑应用程序的 list (这可以直接在 Azure 门户中完成)并将 "groupMembershipClaims" 属性设置为 "All""SecurityGroup" 根据需要。

如前所述更新应用程序 list 后,您可以获取组 ID 作为声明的一部分。下面是解码后的 JWT token 的快速示例。请注意,与之前解释的角色声明相比,这是一个完全不同的声明

示例代码 - Authorization in a web app using Azure AD groups & group claims

组与角色

请理解 Azure AD 组及其成员完全独立于任何单个应用程序。

Azure AD 组的生命周期也可能不同,即在应用程序被删除或不再需要后,组可能会继续存在很长时间。

另一方面,应用程序角色与一个特定应用程序密切相关。

对于某些应用程序,授权策略是检查用户的组成员身份而不是应用程序特定角色。我还看到过应用程序根据应用程序特定角色和用户所属组的组合做出授权决策的情况。


附带说明一下,为确保 token 大小不超过 HTTP header 大小限制,Azure AD 限制了它包含在组声明中的 objectId 的数量。如果用户所属的组数超过超额限制(SAML token 为 150 个,JWT token 为 200 个),则 Azure AD 不会发出 token 中的组声明。相反,它在 token 中包含超额声明,指示应用程序查询图形 API 以检索用户的组成员资格。

其他相关的 SO 帖子:

  • ASP.NET mvc and azure active directory security group based authorization
  • Azure Active Directory Integration with Custom RBAC
  • How to check if a user is in an AD group via Azure AD?

https://stackoverflow.com/questions/56370400/

相关文章:

angular - 如何在构造函数中选择性地注入(inject) MAT_DIALOG_DATA

google-chrome - 本地主机 Web 应用程序访问远程 API 时未设置 Cookie

python - 无法编码响应 : datetime. datetime(2019, 5, 29,

node.js - 在 Nexus 中获取最新版本的 Node 包

reactjs - 我们如何在使用 react 最终形式时在组件中设置状态

git - 一个 git 子模块卡在错误的提交 ('submodule update' 不工作)

c# - 从不同的项目 .Net 访问 protobuf

python-3.x - 如何在 Python 中创建具有每个变量值之间差距的堆积条形图

google-sheets - 具有日期条件的 Google 表格摘要

python - 是否可以在 Snakemake 中有一个可选的输出文件?