开发模式下绕过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加载时自动调用登录接口获取令牌,然后自动设置授权头:
- 先在
Program.cs的SwaggerUI配置中注入自定义脚本:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1"); // 注入自定义授权脚本 c.InjectJavascript("/swagger-auth.js"); });
- 在项目的
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
相关产品推荐
相关产品推荐

