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

ASP.NET Core项目Swagger实现无Bearer前缀Token验证的方法问询

ASP.NET Core 无需Bearer前缀实现JWT校验方案

1. 修改JWT认证服务配置

在你的Program.cs文件中,调整JWT Bearer认证的事件逻辑,手动处理Authorization请求头的内容,可同时兼容带/不带Bearer前缀的两种输入:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 保留你原有的TokenValidationParameters、Issuer、Audience等校验配置不变
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidAudience = builder.Configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };

        // 新增消息接收事件,手动提取token
        options.Events = new JwtBearerEvents
        {
            OnMessageReceived = context =>
            {
                var authHeader = context.Request.Headers.Authorization.FirstOrDefault();
                if (!string.IsNullOrWhiteSpace(authHeader))
                {
                    // 如果带Bearer前缀就拆分提取token,不带前缀则直接使用请求头内容
                    if (authHeader.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
                    {
                        context.Token = authHeader["Bearer ".Length..].Trim();
                    }
                    else
                    {
                        context.Token = authHeader.Trim();
                    }
                }
                return Task.CompletedTask;
            }
        };
    });

2. 调整Swagger配置(针对Swagger测试场景可选配置)

如果你需要在Swagger界面直接输入不带前缀的token测试,修改Swagger的安全定义提示即可:

builder.Services.AddSwaggerGen(opt =>
{
    // 保留你原有的Swagger基础配置
    opt.SwaggerDoc("v1", new OpenApiInfo { Title = "你的接口服务名称", Version = "v1" });

    opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Name = "Authorization",
        Type = SecuritySchemeType.ApiKey,
        In = ParameterLocation.Header,
        // 修改描述,提示用户无需输入Bearer前缀
        Description = "直接输入JWT令牌即可,无需额外添加Bearer前缀"
    });

    opt.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            Array.Empty<string>()
        }
    });
});

3. 功能验证

启动项目后,无论是接口直接调用还是Swagger界面测试,都可以直接在Authorization请求头传入纯token完成校验,不需要额外添加Bearer前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:03