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

开发模式下绕过ASP.NET Core Web API身份验证的方法

解决Swagger测试时手动复制JWT令牌的问题

下面是几种实用方案,帮你省去每次复制粘贴令牌的麻烦:

1. 给Swagger添加JWT授权支持(基础方案)

直接在Swagger配置里添加JWT安全定义和要求,让Swagger界面出现授权按钮,一次输入令牌后自动携带到后续请求:

在Program.cs中配置AddSwaggerGen:

builder.Services.AddSwaggerGen(c =>
{
    // 定义JWT安全方案
    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Description = "JWT授权格式:Bearer {你的令牌}",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey,
        Scheme = "Bearer"
    });

    // 给所有API接口添加JWT授权要求
    c.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            Array.Empty<string>()
        }
    });
});

配置完成后,Swagger页面右上角会出现Authorize按钮,点击后输入Bearer {你的令牌}并保存,之后所有请求都会自动带上这个授权头,不用再手动复制。

2. 自动获取并注入令牌(进阶自动化方案)

如果想完全不用手动输入令牌,可以通过自定义脚本让Swagger加载时自动调用登录接口获取令牌,然后自动设置授权头:

  1. 先在Program.cs的SwaggerUI配置中注入自定义脚本:
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1");
    // 注入自定义授权脚本
    c.InjectJavascript("/swagger-auth.js");
});
  1. 在项目的wwwroot目录下创建swagger-auth.js文件,编写自动登录逻辑:
window.onload = function() {
    // 调用你的登录接口,替换成实际的登录接口地址和测试账号
    fetch('/api/Account/Login', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ UserName: "testuser", Password: "testpass123" })
    })
    .then(response => response.json())
    .then(data => {
        if (data.token) {
            // 自动设置Swagger的JWT授权
            const ui = window.ui;
            ui.preauthorizeApiKey('Bearer', data.token);
        }
    })
    .catch(err => console.error('自动获取令牌失败:', err));
};

注意:测试环境使用即可,不要在生产环境硬编码账号密码,可通过环境变量或配置文件读取测试账号。

3. 集成OAuth2.0授权流程(适用于IdentityServer等场景)

如果你的API基于IdentityServer或ASP.NET Core Identity的OAuth2.0实现认证,可以直接配置Swagger支持OAuth授权码流程,实现一键登录自动获取令牌:

在Program.cs中配置SwaggerGen:

builder.Services.AddSwaggerGen(c =>
{
    c.AddSecurityDefinition("OAuth2", new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.OAuth2,
        Flows = new OpenApiOAuthFlows
        {
            AuthorizationCode = new OpenApiOAuthFlow
            {
                AuthorizationUrl = new Uri("https://你的认证服务器地址/connect/authorize"),
                TokenUrl = new Uri("https://你的认证服务器地址/connect/token"),
                Scopes = new Dictionary<string, string>
                {
                    { "api.read", "API读取权限" },
                    { "api.write", "API写入权限" }
                }
            }
        }
    });

    c.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "OAuth2" }
            },
            new[] { "api.read", "api.write" }
        }
    });
});

然后配置SwaggerUI:

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1");
    c.OAuthClientId("你的客户端ID");
    c.OAuthClientSecret("你的客户端密钥");
    c.OAuthAppName("API测试");
    c.OAuthUsePkce(); // 启用PKCE增强安全性
});

配置完成后,点击Swagger的Authorize按钮,会跳转到你的认证服务器登录页面,登录成功后自动返回Swagger并携带令牌,后续请求自动授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:55:24