如何修改Swashbuckle的JWT认证头从Bearer改为Token?
问题描述
我正在实现Conduit规范,该规范要求JWT认证头格式为:
Authorization: Token jwt.token.here
使用Microsoft.AspNetCore.Authentication.JwtBearer时,默认认证头是Authorization: Bearer {token goes here},我已经通过添加OnMessageReceived事件,将后端的默认标识替换为Token,后端现在可以正确识别Token前缀的认证头。
但在配置Swashbuckle的安全方案时,始终无法修改SwaggerUI生成的请求头标识为Token,目前只能暂时用Postman调试API,希望能在Swashbuckle/OpenAPI/SwaggerUI中正常使用符合规范的认证方式。
我想知道是否有配置项可以覆盖默认的Bearer标识,还是这个标识是硬编码的,需要新增特性支持?以下是我尝试过的无效配置——修改Scheme字段为Token会直接导致运行时错误:
builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" }); // 配置JWT认证 var securityScheme = new OpenApiSecurityScheme { Name = "Authorization", Description = "JWT Authorization header using the Bearer scheme", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme = "Bearer", BearerFormat = "JWT" }; c.AddSecurityDefinition("Token", securityScheme); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Token" } }, Array.Empty<string>() } }); });
更新情况
点击Swagger UI的“Authorize🔓”按钮后,弹窗标题显示“Token”(应该来自AddSecurityDefinition或AddSecurityRequirement的配置),但输入框的提示文字依然是“Bearer {token}”;输入Token值完成授权后,发送请求时实际生成的请求头仍然是Authorization: Bearer {token值},并没有替换成规范要求的Token前缀。
内容的提问来源于stack exchange,提问作者Matthew Groves
相关产品推荐
相关产品推荐

