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

如何将NSwag Swagger UI排除在ASP.NET Core身份验证之外?

解决方案

要让Swagger UI完全跳过ASP.NET Core的身份验证(适配全局启用授权策略的场景),可以通过路由映射的方式给Swagger相关路径单独设置匿名访问权限,具体实现如下:

步骤1:注册Swagger服务(若未注册)

先确保已添加Swagger生成器的配置,若需要把AzureAD认证集成到Swagger UI中,还可以补充OAuth2相关配置:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });

    // 可选:集成AzureAD OAuth2到Swagger UI
    c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.OAuth2,
        Flows = new OpenApiOAuthFlows
        {
            Implicit = new OpenApiOAuthFlow
            {
                AuthorizationUrl = new Uri("https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize"),
                Scopes = new Dictionary<string, string>
                {
                    { "api://{你的客户端ID}/access_as_user", "以用户身份访问API" }
                }
            }
        }
    });
    c.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "oauth2" }
            },
            new[] { "api://{你的客户端ID}/access_as_user" }
        }
    });
});

步骤2:保留原有认证授权配置

你的AzureAD认证和全局授权策略配置可以保持不变:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApi(adSection);

builder.Services.AddAuthorization(options =>
{
    // 默认所有请求遵循默认授权策略
    options.FallbackPolicy = options.DefaultPolicy;
});

步骤3:给Swagger路径设置匿名访问

在中间件配置阶段,用MapWhen将Swagger相关路径映射到单独的分支,并添加AllowAnonymous()来跳过身份验证:

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    // 匹配所有/swagger开头的请求,单独处理并允许匿名
    app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/swagger"), swaggerApp =>
    {
        swaggerApp.UseSwagger();
        swaggerApp.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API V1");
            
            // 可选:若配置了OAuth2,添加Swagger UI的OAuth参数
            c.OAuthClientId("{你的客户端ID}");
            c.OAuthTenantId("{你的租户ID}");
        });
    }).AllowAnonymous();
}

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

app.MapControllers();

app.Run();

这种方式会让所有/swagger开头的请求(包括Swagger UI页面和API描述JSON文件)都跳过全局授权策略,达到和控制器添加[AllowAnonymous]相同的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:12:41