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

如何在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可能无法自动识别,这时候可以加个自定义脚本:

  1. 在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}`);
            }
        }
    });
});
  1. 在SwaggerUI配置里注入这个脚本:
builder.Services.AddSwaggerUI(c =>
{
    // 其他配置...
    c.InjectJavascript("/swagger-custom.js");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:27:43