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

.NET 8 API中Swagger的Bearer安全定义不显示问题求助

.NET 8 API中Swagger Bearer认证配置问题排查

问题描述

我正在搭建新的.NET 8 API,使用Identity处理认证流程,却在配置Swagger的Bearer令牌认证时遇到问题。参考资料后我编写了如下Swagger配置代码:

builder.Services.AddSwaggerGen(options =>
{
    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey
    });
    
    options.OperationFilter<SecurityRequirementsOperationFilter>();
});

我已输入Bearer令牌,但仍无法使用授权功能。我了解到.NET 8中的Authorization/Identity有变更,旧教程可能已过时,我的Program.cs中认证相关代码如下:

builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme);
builder.Services.AddAuthorizationBuilder();

builder.Services.AddIdentityCore<User>()
    .AddEntityFrameworkStores<DatabaseContext>()
    .AddApiEndpoints();

请问是否是这部分代码导致的问题?

问题分析与解决方案

问题确实出在你提供的认证和Swagger配置代码中,以下是具体问题和修正方案:

1. 认证服务未指定默认方案

你当前的AddAuthentication()调用没有设置默认认证方案,导致.NET无法确定使用哪种认证方式处理Bearer令牌。修正代码如下:

// 指定默认认证方案为Identity提供的Bearer Scheme
builder.Services.AddAuthentication(IdentityConstants.BearerScheme)
    .AddBearerToken(IdentityConstants.BearerScheme);

builder.Services.AddAuthorizationBuilder();

builder.Services.AddIdentityCore<User>()
    .AddEntityFrameworkStores<DatabaseContext>()
    .AddApiEndpoints();

2. Swagger的Bearer安全定义配置不规范

原配置使用SecuritySchemeType.ApiKey不符合Bearer认证的标准规范,且缺少必要的Scheme说明。需要调整为SecuritySchemeType.Http并补充相关配置,同时直接添加安全要求替代原SecurityRequirementsOperationFilter(或确保Filter正确关联定义):

builder.Services.AddSwaggerGen(options =>
{
    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.Http,
        Scheme = "Bearer",
        BearerFormat = "JWT",
        Description = "请输入Bearer令牌,格式为:Bearer {你的令牌内容}"
    });

    // 添加安全要求,确保所有需要授权的接口都应用Bearer认证
    options.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            Array.Empty<string>()
        }
    });
});

3. 确保中间件顺序正确

在Program.cs的中间件管道中,必须先添加认证中间件,再添加授权中间件,且要放在路由和Swagger中间件之前:

app.UseAuthentication();
app.UseAuthorization();

// 后续添加Swagger和路由中间件
app.UseSwagger();
app.UseSwaggerUI();

// 映射Identity的API端点(如果使用)
app.MapIdentityApi<User>();
app.MapControllers();

完成以上调整后,重新启动API,在Swagger UI中输入Bearer {令牌}格式的认证信息,即可正常使用授权功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:28:35