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

独立Blazor WASM配置AAD角色后授权策略校验失败如何解决

问题根源

ASP.NET Core 授权系统默认的 RequireRole 方法,是从键为 http://schemas.microsoft.com/ws/2008/06/identity/claims/role 的声明中读取角色值,而 Azure AD v2 端点返回的角色存放在名为 roles 的声明中。你虽然在 MSAL 配置中指定了 RoleClaim = "roles",但授权核心服务没有同步该配置,导致校验时找不到对应的角色值。


解决方案1:直接用声明校验(最简便)

修改 Program.cs 中的授权策略配置,不用 RequireRole,改用 RequireClaim 直接匹配 roles 声明的值即可:

builder.Services
    .AddAuthorizationCore(options =>
    {
        options.AddPolicy("Samordnare", policy =>
            policy.RequireClaim("roles", "User.EnrolUnenrol"));
        options.AddPolicy("Handledare", policy =>
            policy.RequireClaim("roles", "Sessions.CRUD"));
    });

解决方案2:全局配置角色声明类型

如果你希望继续使用 RequireRole 方法,可以在配置授权时指定全局的角色声明类型,和 MSAL 配置保持一致:

builder.Services
    .AddAuthorizationCore(options =>
    {
        // 全局指定角色声明类型为AAD返回的roles字段
        options.RoleClaimType = "roles";
        options.AddPolicy("Samordnare", policy =>
            policy.RequireRole("User.EnrolUnenrol"));
        options.AddPolicy("Handledare", policy =>
            policy.RequireRole("Sessions.CRUD"));
    });

可选优化配置

建议将 Azure 应用清单中的 accessTokenAcceptedVersion 从 null 修改为 2,和当前使用的 v2.0 身份端点保持一致,避免出现不必要的声明映射异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:45:03