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

如何在Entra ID中配置ASP.NET Core的权限基访问控制(PBAC)

在Entra ID中实现基于权限的访问控制(PBAC)方案

核心可行方案:用Entra ID应用角色模拟细粒度权限

Entra ID本身没有原生的独立权限实体,但可以通过将细粒度权限定义为应用角色的方式,实现PBAC的效果,具体操作如下:

  • 在Entra ID的目标应用注册中,添加新的应用角色:名称设为trade.execute,显示名称可设为“执行交易权限”,并将“允许分配到”设置为“用户/组”
  • 将trade.execute应用角色分配给已有的trader.senior和trader.junior对应的测试用户,也可直接分配给包含这些用户的组(如果已有分组)
  • 实现[MyCustomAuthorization(permission = "trade.execute")]属性:在授权逻辑中解析JWT令牌的roles声明(Entra ID会把所有分配的应用角色注入该声明),检查声明中是否包含指定的权限值trade.execute

以.NET为例,自定义授权属性的核心逻辑可参考:

public class MyCustomAuthorizationAttribute : AuthorizeAttribute
{
    public string Permission { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var userRoles = httpContext.User.Claims
            .Where(c => c.Type.Equals("roles", StringComparison.OrdinalIgnoreCase))
            .Select(c => c.Value);
        return userRoles.Contains(Permission);
    }
}

备选方案评估

方案1:用Entra Groups管理权限

该方案可行,本质是通过组批量关联权限角色,流程为:

  • 创建Senior Trader、Junior Trader组,将对应用户加入组
  • 创建trade.execute应用角色,分配给这两个组
  • 用户登录后,令牌中会包含trade.execute角色声明,自定义授权属性可基于该声明完成校验

优势:批量管理用户权限更高效,适合用户规模较大的场景;劣势:多了一层组的维护成本,需确保组与权限角色的映射关系准确。

方案2:自定义角色-权限映射层

该方案灵活性最高,但需额外的开发与维护成本:

  • 需搭建独立数据存储(如数据库)维护角色(trader.senior/trader.junior)与权限(trade.execute)的映射关系
  • 开发对应的管理界面供运维人员调整映射规则
  • 为避免每次请求查询存储,需实现缓存机制(如Redis)提升性能

适用场景:仅当权限规则需要频繁动态调整,或Entra ID应用角色无法满足复杂权限组合需求时才考虑,否则会增加不必要的系统复杂度。

关键注意事项

  • 建议给权限类应用角色设置统一命名规范(如permission.trade.execute),与传统角色区分开,避免混淆
  • 自定义授权属性需注意Entra ID令牌中roles声明的大小写(通常为小写),确保校验逻辑准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:10:19