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

C# Swagger配置客户端凭证流后请求未携带Authorize头问题

问题根因

你遇到的问题由两个配置错误共同导致:

  1. 安全方案ID不匹配
    AddSecurityDefinition方法的第一个参数是安全方案的唯一标识,你这里传入的是"oauth2",但后续AddSecurityRequirement中通过OpenApiReference引用安全方案时,传入的ID是JwtBearerDefaults.AuthenticationScheme(默认值为"Bearer")。Swagger UI通过ID关联已获取的令牌与接口安全校验规则,ID不一致时,授权流程可以正常完成,但令牌不会被自动注入请求头。
  2. 安全要求未关联对应权限范围(Scope)
    你在OAuth2客户端凭证流中定义了"thescope"权限范围,但AddSecurityRequirement中传入的权限范围列表是空集合,Swagger UI会判定该安全要求无需关联已申请对应权限的令牌,因此不会触发令牌注入逻辑。
修复方案

将AddSecurityRequirement部分的配置修改为如下内容,保证方案ID一致、关联正确的权限范围即可:

c.AddSecurityRequirement(new OpenApiSecurityRequirement()
{
    {
        new OpenApiSecurityScheme
        {
            Reference = new OpenApiReference
            {
                Type = ReferenceType.SecurityScheme,
                // 必须和AddSecurityDefinition第一个参数(方案ID)完全一致
                Id = "oauth2"
            },
            Scheme = "Bearer",
            In = ParameterLocation.Header
        },
        // 传入OAuth2流中定义的权限范围
        new List<string>() { "thescope" }
    }
});
可选校验项

如果修改后仍存在问题,可以检查Swagger UI中间件配置,确认已配置对应OAuth2客户端参数(不需要硬编码密钥,仅配置客户端ID即可保证授权弹窗的默认值填充正常):

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "The API v1");
    c.OAuthClientId("你的客户端ID");
    c.OAuthScopeSeparator(" ");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:39:35