You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Azure AD嵌套组实现ASP.NET Core MVC授权?

解决AAD嵌套组授权失效问题(无需修改代码/配置即可自由管理组)

问题核心

你的ASP.NET Core MVC应用基于Azure Active Directory(AAD)组做授权,直接组成员能正常通过验证,但嵌套组的用户Claims中不包含父组ID,导致授权失败(比如「View Report」组包含整个IT团队组,IT团队成员无法通过该组的授权策略)。

根本原因

AAD默认仅在ID Token中返回用户直接加入的组ID,不会自动包含嵌套组的父组信息,因此现有代码通过groups Claim匹配组ID的逻辑无法识别嵌套组成员。

无需修改代码的解决方案(仅AAD端配置)

通过配置AAD应用注册,让ID Token自动返回用户所属的所有嵌套组ID,即可兼容现有授权逻辑,后续在AAD中增删组无需改动代码:

  1. 登录Azure门户,进入你的AAD应用注册页面
  2. 切换到令牌配置选项卡,点击添加组声明
  3. 在弹出的配置窗口中:
    • 勾选安全组(若使用Microsoft 365组则勾选对应选项)
    • 在「组 ID」选项下,选择包括嵌套组
    • 保持「源属性」为objectID(与你现有代码中匹配的组ID类型一致)
  4. 保存配置

完成后,用户登录时ID Token中的groups Claim会包含所有直接和间接(嵌套)所属的组ID,现有授权策略的HasClaim判断即可正常识别嵌套组成员。

补充说明

  • 若用户所属组数量超过AAD默认限制(200个组),需在应用注册的清单中调整配置以支持更多组:
    "groupMembershipClaims": "SecurityGroup",
    "optionalClaims": {
      "idToken": [
        {
          "name": "groups",
          "source": null,
          "essential": false,
          "additionalProperties": [
            "emit_as_roles"
          ]
        }
      ]
    }
    
  • 若要实现完全无需修改配置即可在AAD中增删组,可考虑将授权逻辑改为基于AAD应用角色:在应用注册中定义对应工具的角色,将AAD组分配到角色,代码中通过RequireRole做授权。但此方式需要修改现有授权策略代码。

内容的提问来源于stack exchange,提问作者FunkyVerb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:10:43