如何在Swagger UI中生成Bearer Token?.NET Core 2.2 WebAPI场景
让Swagger UI支持通过用户名密码生成Bearer Token
看起来你已经配置了Bearer的安全定义,但要让Swagger直接支持生成Token,需要针对**Resource Owner Password Credentials Grant(密码授权流)**来配置,而不是之前尝试的implicit流。下面是适配你.NET Core 2.2项目的完整解决方案:
1. 完善SwaggerGen的安全定义与全局要求
在Startup.cs的ConfigureServices方法中,修改SwaggerGen配置,同时添加密码流的OAuth2定义和Bearer Token的API Key定义:
services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title = "你的API名称", Version = "v1" }); // 配置Bearer Token的API Key规则(用于在请求头携带Token) options.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "请输入格式为 `Bearer {token}` 的JWT Token", Name = "Authorization", Type = "apiKey" }); // 配置OAuth2密码流(用于Swagger UI直接获取Token) options.AddSecurityDefinition("OAuth2", new OAuth2Scheme { Type = "oauth2", Flow = "password", // 指定为密码授权流 TokenUrl = "/connect/token", // 你的OpenID Token端点地址 Scopes = new Dictionary<string, string> { // 根据你的API需求添加Scope,比如: { "api.read", "API只读权限" }, { "api.write", "API读写权限" } } }); // 添加全局安全要求,确保所有API接口都需要携带Bearer Token options.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> { { "Bearer", new string[] {} }, { "OAuth2", new string[] {} } }); });
2. 配置SwaggerUI的OAuth2客户端参数
在Configure方法中,补充SwaggerUI的OAuth2客户端配置,让授权弹窗正常工作:
app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API V1"); // 配置OAuth2客户端信息 options.OAuthClientId("你的OpenID客户端ID"); // 对应OpenID服务中注册的客户端ID options.OAuthAppName("你的API"); // 授权弹窗显示的应用名称 options.OAuthScopeSeparator(" "); // Scope的分隔符 // 如果你的OpenID服务要求客户端通过Basic认证获取Token,开启下面这行 options.OAuthUseBasicAuthenticationWithAccessCodeGrant(); });
3. 验证OpenID服务的授权类型
确保你的OpenID服务已经启用了Resource Owner Password Credentials Grant授权类型,并且/connect/token端点支持接收x-www-form-urlencoded格式的请求(需要包含grant_type=password、username、password、client_id等参数)。这是Swagger能成功获取Token的前提。
4. 测试授权功能
启动项目打开Swagger UI后,右上角会出现Authorize按钮:
- 点击按钮,选择
OAuth2方案,输入用户名、密码,勾选需要的Scope(如果有配置) - 点击Authorize,Swagger会自动调用
/connect/token获取Token,并自动将Token添加到后续所有API请求的Authorization头中(格式为Bearer {token})
常见问题排查
- 授权弹窗无用户名密码输入框:检查
Flow是否设置为password,TokenUrl是否正确指向你的OpenID Token端点 - 获取Token失败:查看浏览器控制台的网络请求,确认参数是否匹配(比如client_id是否正确、授权类型是否开启)
- API请求未携带Token:检查
AddSecurityRequirement是否正确添加了Bearer和OAuth2的安全要求
内容的提问来源于stack exchange,提问作者everydayXpert




