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

配置Swagger UI 10.1.7发送Bearer Token头及授权数据存储咨询

从.NET 8迁移到.NET 10后Swashbuckle.AspNetCore 10.1.7授权问题排查与配置需求

背景

我们在从.NET 8迁移到.NET 10的过程中,将项目的Swashbuckle.AspNetCore从6.6.2版本升级到了10.1.7版本,但新版本的Swagger UI出现了严重的授权问题。

迁移前的认证/授权配置

1. OAuth2隐式授权方案

我们使用隐式流登录并获取access token,身份提供商配置代码如下:

public static AuthenticationBuilder AddAuthenticationForClientPortalApi(
    this IServiceCollection services,
    AuthorityConfig authorityConfig, 
    Action<IdentityServerAuthenticationOptions> configureOptions = null)
{
    if (services == null)
        throw new ArgumentNullException(nameof(services));

    return services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
        .AddIdentityServerAuthentication(options =>
        {
            options.Authority = authorityConfig.BaseUrl;
            options.ApiName = authorityConfig.ApiName;
            configureOptions?.Invoke(options);
        });
}

同时添加了oauth2安全定义,通过身份提供商登录页面提交凭证获取access token:

return services.AddTransient<IConfigureOptions<SwaggerGenOptions>, TSwaggerConfig>()
    .AddSwaggerGen(options =>
    {
        options.DescribeAllParametersInCamelCase();
        options.OperationFilter<SwaggerDefaultValuesFilter>();

        options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
        {
            Type = SecuritySchemeType.OAuth2,
            Flows = authFlow == AuthFlowType.Implicit ? 
                new OpenApiOAuthFlows()
                {
                    Implicit = new OpenApiOAuthFlow()
                    {
                        AuthorizationUrl = new Uri(authorityConfig?.AuthorizationUrl),
                        Scopes = scopes
                    }
                } : 
                new OpenApiOAuthFlows()
                {
                    ClientCredentials = new OpenApiOAuthFlow()
                    {
                        TokenUrl = new Uri(authorityConfig?.AuthorizationUrl),
                        Scopes = scopes 
                    }
                }
        });

        options.OperationFilter<TAuthFilter>();
        options.EnableAnnotations();

        if (maskSchemas)
        {
            options.CustomSchemaIds(type => 
                Convert.ToBase64String(Encoding.UTF8.GetBytes(type?.FullName.ToSha256() ?? ""))
                .Trim('='));
        }
    });

2. Swagger UI登录流程

该配置支持通过Swagger UI的Authorize按钮登录,自动重定向到身份提供商的登录页面。

3. 请求执行

执行授权端点请求时,会自动插入带Bearer access token的Authorization Header。

迁移后的问题

迁移到最新Swashbuckle.AspNetCore包(仅调整命名空间)后,执行API请求时仅发送cookie,缺失带Bearer token的Authorization Header。

需求与疑问

  • 如何配置Swagger UI 10.x.x,在保持OAuth2隐式流登录的同时,让请求同时发送Bearer token的Authorization Header和cookie?
  • Swagger UI 10.x.x在初次登录/解锁API页面后,授权数据存储在何处?

当前项目引用的包:

<PackageReference Include="Microsoft.OpenApi" Version="2.4.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.7" />

已搜索相关问题,但未找到针对.NET 10和Swashbuckle.AspNetCore 10.1.7的解决方案,旧版本的workaround不适用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:17:31