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

ASP.NET Core 2.0用JWT中间件报错:未找到‘Bearer’授权策略

解决ASP.NET Core 2.0 JWT认证中"Bearer"授权策略未找到的问题

嘿,我来帮你搞定这个头疼的错误!你遇到的InvalidOperationException: The AuthorizationPolicy named: 'Bearer' was not found,大概率是因为认证/授权的配置步骤缺失或者中间件顺序不对,咱们一步步排查:

1. 确认ConfigureServices里的认证服务配置是否完整

首先,你需要在ConfigureServices中正确注册JWT Bearer认证服务,并且设置好必要的验证参数。比如:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

public void ConfigureServices(IServiceCollection services)
{
    // 先添加认证服务,指定默认认证方案为Bearer
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                // 替换成你实际的Issuer和密钥
                ValidIssuer = "YourIssuerName",
                ValidAudience = TokenAudience, // 对应你定义的TokenAudience常量
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourStrongSecretKey"))
            };
        });

    // 别忘了添加授权服务
    services.AddAuthorization();
}

2. 检查Configure方法的中间件顺序

ASP.NET Core的中间件顺序非常关键,UseAuthentication()必须在UseAuthorization()之前注册,而且要放在UseMvc()之前。正确的顺序大概是这样:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // 静态文件中间件(如果有的话)
    app.UseStaticFiles();

    // 先启用认证
    app.UseAuthentication();
    // 再启用授权
    app.UseAuthorization();

    // 最后启用MVC
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

3. 检查控制器/Action上的授权属性

如果你在控制器或Action上用了[Authorize(Policy = "Bearer")],那你必须先在AddAuthorization中定义这个策略,否则就会出现找不到策略的错误。

两种解决方式:

  • 方式一:直接使用默认认证方案
    把授权属性改成[Authorize]或者[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)],这样就不需要额外定义策略了。

  • 方式二:显式定义"Bearer"授权策略
    如果一定要用Policy,就在ConfigureServices的AddAuthorization里添加策略:

    services.AddAuthorization(options =>
    {
        options.AddPolicy("Bearer", policy =>
        {
            policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
            policy.RequireAuthenticatedUser();
        });
    });
    

最后再核对一下

检查你的Startup类,看看是不是漏掉了上面某一步——比如没注册AddAuthentication,或者中间件顺序搞反了,又或者用了[Authorize(Policy = "Bearer")]但没定义策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:57:45