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

ASP.NET Core MVC迁移至Microsoft Entra ID后授权失效求助

解决ASP.NET Core MVC迁移至Microsoft Entra ID后的授权失效问题

1. 配置Entra ID应用返回组声明

  • 登录Entra ID门户,找到你的应用注册
  • 进入令牌配置页面,点击添加组声明
    • 选择安全组(匹配你使用的组类型),勾选组名称(如果用"GroupX"这类名称校验)或组ID
    • 注意:若组数量超过200个,需启用组筛选或改用应用角色,避免令牌体积超限

2. 调整ASP.NET Core认证配置,映射角色声明

修改认证服务代码,指定角色声明的来源,确保框架能识别Entra ID返回的组信息:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration)
    .AddRoles(options =>
    {
        // 若选组名称,声明类型为"groups";若选组ID,对应类型为"http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"
        options.RoleClaimType = "groups";
    });

// 启用授权服务(确保这行代码存在)
builder.Services.AddAuthorization();

3. 验证声明加载情况

在控制器中添加测试代码,确认组信息已包含在用户声明中:

public IActionResult CheckClaims()
{
    var claimList = HttpContext.User.Claims.Select(c => $"{c.Type}: {c.Value}");
    return Content(string.Join("<br>", claimList));
}

4. 推荐方案:使用Entra ID应用角色

如果组数量较多或需要更灵活的权限控制,建议用应用角色替代直接的安全组校验:

  • 在Entra ID应用注册的应用角色页面添加自定义角色(比如"GroupXAccess")
  • 将目标用户或安全组分配到该应用角色
  • 调整认证配置中的角色声明类型为roles:
options.RoleClaimType = "roles";

之后即可用[Authorize(Roles = "GroupXAccess")]完成授权校验

内容的提问来源于stack exchange,提问作者M. Schuepbach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:52:02