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

