如何在C#的Swagger中配置登录密码获取JWT并写入请求头?
完全可以实现,按以下步骤配置即可
1. 配置Swagger生成器(SwaggerGen)
在Program.cs里配置Swagger的认证规则,让它识别Bearer格式的JWT认证:
builder.Services.AddSwaggerGen(c => { // 定义Bearer认证方案 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.Http, Scheme = "bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT请求头格式:Bearer {你的Token}" }); // 给所有接口加上Bearer认证要求 c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } }); });
2. 配置SwaggerUI实现自动登录取Token
接下来配置SwaggerUI,让它提供登录界面,自动调用你的/login接口拿Token并写入请求头:
builder.Services.AddSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API名称 V1"); // 配置密码模式的OAuth2,指向你的登录接口 c.OAuthClientId("swagger-login-client"); // 自定义客户端标识,随便填 c.OAuthUsePasswordGrant(); c.OAuthTokenUrl("/api/login"); // 替换成你的实际登录接口路由,比如/api/auth/login c.OAuthAppName("API登录"); // 登录弹窗的标题,自定义 });
3. 确保Swagger能正确解析登录响应
你的登录接口返回的是ApiResponse<AuthResponseDto>,要保证Swagger能正确识别里面的Token字段。如果你的ApiResponse是带Data字段的通用包装类(比如public T Data { get; set; }),Swagger默认会解析到Data.Token;如果解析有问题,可以用SwaggerResponse特性明确标注响应结构,或者添加Schema过滤器处理。
4. 测试流程
启动项目打开SwaggerUI(一般是/swagger路径):
- 点击右上角的「Authorize」按钮
- 在弹窗里输入你的
Login和Password - 点击「Authorize」,Swagger会自动调用登录接口获取Token
- 成功后,所有后续接口请求都会自动在请求头带上
Authorization: Bearer {你的Token}
特殊情况处理
如果你的登录接口返回的Token字段不是默认的access_token(比如你的是Token),SwaggerUI可能无法自动识别,这时候可以加个自定义脚本:
- 在
wwwroot下创建swagger-custom.js,内容如下:
window.addEventListener('load', function() { const ui = window.ui; ui.initOAuth({ clientId: "swagger-login-client", tokenUrl: "/api/login", usePasswordGrant: true, onComplete: function(authResult) { // 从响应里提取Token,根据你的实际返回结构调整 const token = authResult.data?.Token; if (token) { ui.preauthorizeApiKey("Bearer", `Bearer ${token}`); } } }); });
- 在SwaggerUI配置里注入这个脚本:
builder.Services.AddSwaggerUI(c => { // 其他配置... c.InjectJavascript("/swagger-custom.js"); });
内容的提问来源于stack exchange,提问作者Mezozoi
相关产品推荐
相关产品推荐

