Dotnet Core 和 Swagger:防止 Swagger UI 未经身份验证

问题描述 投票:0回答:1

各位开发者大家好,

我实现了一个具有多个端点的服务器,并集成了 Swashbuckle Swagger UI 中间件。 每个人都可以访问该中间件,而无需登录服务器。 我正在使用不记名令牌来验证我的请求。

是否有可能在未登录我的服务器的情况下阻止访问 Swagger UI?

这是我在 Startup.cs 中注册 swagger 的方法:

app.UseSwagger();

app.UseSwaggerUI(c =>
{
     c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

并生成 swagger json 文件:

// Register Swagger generator
services.AddSwaggerGen();

PS:我注意到即使我登录并获得了 JWT,在 swagger 请求中也不会发送任何身份验证标头。如果我可以添加/强制这个标头,我可以在另一个中间件中检查它。

提前谢谢。

c# authentication .net-core swagger-ui swashbuckle.aspnetcore
1个回答
0
投票

如果您希望使用回退策略要求对所有端点进行授权,但仍希望保持 Swagger 页面可访问,您只需在中间件管道中注册 SwaggerUI 身份验证和授权之前。

builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization(options => 
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .AddAuthenticationSchemes("Bearer")
       .Build());

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("../swagger/v1/swagger.json", "API");
    c.RoutePrefix = string.Empty; // Set Swagger UI at apps root
});

app.UseAuthentication();
app.UseAuthorization();
© www.soinside.com 2019 - 2024. All rights reserved.