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

.NET Core 3.1用户认证后如何为其分配符合要求的Authorization Policy

问题根因

你遇到的授权失效问题由两个配置错误共同导致:

  • Razor页面文件夹绑定的授权策略名称与实际定义的策略名称不匹配
  • 授权策略中校验的声明类型与登录时写入的声明类型不一致
修复步骤

1. 修正授权策略名称匹配

你在AddRazorPagesOptions中给/NonCourt_Users文件夹绑定的策略名为Non Court User,但实际通过AddPolicy定义的策略名为NonCourt_Users,名称不匹配会导致系统找不到对应授权策略,默认判定授权失败。
修改Startup代码中的Razor页面配置段:

services.AddRazorPages().AddRazorPagesOptions(options =>
{
    // 修正第二个参数为你实际定义的策略名,和AddPolicy的参数一致
    options.Conventions.AuthorizeFolder("/NonCourt_Users","NonCourt_Users");
    options.Conventions.AuthorizeFolder("/Court_Users","Court_Users");
    options.Conventions.AllowAnonymousToPage("/Shared");
});

2. 修正声明类型校验逻辑

你在授权策略中使用.RequireClaim("role", "Court User")校验类型为role的声明,但登录代码中写入的是ClaimTypes.Role类型的声明,ClaimTypes.Role的默认值是http://schemas.microsoft.com/ws/2008/06/identity/claims/role,和字符串role完全不同,导致校验永远不通过。
两种修正方案二选一即可:

方案A:使用内置角色校验方法

services.AddAuthorization(options =>
{
    options.AddPolicy("Court_Users", new AuthorizationPolicyBuilder()
                                    .RequireAuthenticatedUser()
                                    // 改用RequireRole方法,自动适配ClaimTypes.Role类型的声明
                                    .RequireRole("Court User")
                                    .Build());
    options.AddPolicy("NonCourt_Users", new AuthorizationPolicyBuilder()
                                    .RequireAuthenticatedUser()
                                    .RequireRole("Non Court User")
                                    .Build());
});

方案B:显式指定校验的声明类型为ClaimTypes.Role

services.AddAuthorization(options =>
{
    options.AddPolicy("Court_Users", new AuthorizationPolicyBuilder()
                                    .RequireAuthenticatedUser()
                                    .RequireClaim(ClaimTypes.Role, "Court User")
                                    .Build());
    options.AddPolicy("NonCourt_Users", new AuthorizationPolicyBuilder()
                                    .RequireAuthenticatedUser()
                                    .RequireClaim(ClaimTypes.Role, "Non Court User")
                                    .Build());
});

3. 确认中间件顺序

请检查Startup的Configure方法中,中间件顺序必须为UseAuthentication在前、UseAuthorization在后,顺序颠倒也会导致授权失效:

app.UseRouting();

// 先认证再授权,顺序不能换
app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

修复完成后,携带对应角色声明的用户即可正常访问对应文件夹下的页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:15:04