各位开发者大家好,
我实现了一个具有多个端点的服务器,并集成了 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 请求中也不会发送任何身份验证标头。如果我可以添加/强制这个标头,我可以在另一个中间件中检查它。
提前谢谢。
如果您希望使用回退策略要求对所有端点进行授权,但仍希望保持 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();