独立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
相关产品推荐
相关产品推荐

