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

Azure AD应用角色授权异常:访问Admin页面被拒排查

问题排查:Azure AD应用角色授权失败

问题描述

我已在Azure AD中创建名为“Asset Database Admin”的应用角色,并将其分配至我所在的AD组,同时在program.cs中配置了授权规则,但访问/Admin目录下的所有页面均提示“Access Denied”,调用user.IsInRole("Asset Database Admin")返回false。

相关代码

builder.Services.AddRazorPages().AddRazorPagesOptions(ops => { 
    ops.Conventions.AuthorizeFolder("/Admin", "IsAdmin");
});

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
          .AddMicrosoftIdentityWebApp(config.GetSection("AzureAd"));

builder.Services.AddControllersWithViews(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("IsAdmin", policy => policy.RequireRole("Asset Database Admin"));
});

应用角色配置截图

应用角色配置截图

可能的原因及解决方法

  • 令牌未包含角色声明
    Azure AD默认不会将应用角色信息自动加入令牌。需进入应用注册的「令牌配置」页面,添加roles声明,确保ID/访问令牌中包含角色数据。

  • 组分配角色需开启组声明
    由于是给AD组分配角色而非直接给用户,需在应用注册对应的「企业应用」->「属性」中,开启「将组作为声明发送」,选择合适的组类型(如安全组)和声明格式。同时需在「API权限」中添加Directory.Read.All权限并完成管理员同意,让应用能读取组角色关联信息。

  • 认证配置未指定角色声明类型
    Microsoft Identity Web默认使用的角色声明类型与Azure AD返回的roles声明不匹配。修改认证配置,显式指定角色声明类型:

    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(config.GetSection("AzureAd"), options =>
        {
            options.TokenValidationParameters.RoleClaimType = "roles";
        });
    
  • 令牌缓存导致旧令牌生效
    用户当前持有的令牌可能是角色分配前获取的,需强制用户重新登录,清除旧令牌缓存,确保新令牌包含最新角色声明。

  • 角色名称与配置值不匹配
    检查Azure AD中应用角色的「值」字段是否为“Asset Database Admin”——授权时匹配的是角色的「值」而非显示名称,若两者不一致会导致匹配失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:19:52