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

ASP.NET MVC调用Forbid()时出现认证方案未指定错误的原因

问题原因与修复方案

错误核心原因

你虽然通过AddAuthentication(BearerTokenDefaults.AuthenticationScheme)设置了默认认证Scheme,但这只是初始化了认证框架的基础服务,没有添加对应的Bearer Token验证实现逻辑,也没有明确配置默认的ForbidScheme。当调用Forbid()方法时,ASP.NET Core找不到用于生成禁止响应的Scheme,就会抛出这个错误。

修复方案

方案1:完整配置Bearer Token认证(推荐)

如果你的Bearer Token是JWT格式,需要添加JWT Bearer的具体验证配置,同时确保默认Scheme覆盖认证、挑战和禁止场景:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();

// 配置JWT Bearer认证,同时设置默认认证Scheme
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 根据你的实际配置填写JWT验证参数
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidateAudience = true,
            ValidAudience = builder.Configuration["Jwt:Audience"],
            ValidateLifetime = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };
    });

// 配置默认授权策略,绑定认证Scheme
builder.Services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
        .RequireAuthenticatedUser()
        .Build();
});

var app = builder.Build();

// 注意中间件顺序:认证在前,授权在后
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();
app.Run();

方案2:调用Forbid时明确指定Scheme

如果只是临时快速解决问题,可以直接在Forbid()方法中指定使用的Scheme:

if (!user.Email.Equals("my Dummy Address"))
{
    return Forbid(BearerTokenDefaults.AuthenticationScheme);
}

关键注意点

  • AddAuthentication只是搭建认证框架的基础,必须搭配AddJwtBearer这类具体的验证组件,才能完成Token的校验逻辑。
  • 必须保证UseAuthentication中间件在UseAuthorization之前注册,否则认证流程不会生效。
  • Forbid()方法需要明确的Scheme来生成对应的禁止响应(比如返回403状态码和对应的认证头),要么通过全局配置默认Scheme,要么在调用时指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:15:06