You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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.csConfigureServices方法中,修改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=passwordusernamepasswordclient_id等参数)。这是Swagger能成功获取Token的前提。

4. 测试授权功能

启动项目打开Swagger UI后,右上角会出现Authorize按钮:

  • 点击按钮,选择OAuth2方案,输入用户名、密码,勾选需要的Scope(如果有配置)
  • 点击Authorize,Swagger会自动调用/connect/token获取Token,并自动将Token添加到后续所有API请求的Authorization头中(格式为Bearer {token}

常见问题排查

  • 授权弹窗无用户名密码输入框:检查Flow是否设置为passwordTokenUrl是否正确指向你的OpenID Token端点
  • 获取Token失败:查看浏览器控制台的网络请求,确认参数是否匹配(比如client_id是否正确、授权类型是否开启)
  • API请求未携带Token:检查AddSecurityRequirement是否正确添加了BearerOAuth2的安全要求

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

火山引擎 最新活动