gpt4 book ai didi

.net-core - 我们如何使用 Windows 身份验证保护 Swagger UI

转载 作者:行者123 更新时间:2023-12-04 09:38:08 25 4
gpt4 key购买 nike

我们有一个 .Net Core 2.2 Web Api,它使用 swagger ui 来公开 Web Api 定义。我们希望确保此端点仅供特定 AD 组内的用户使用。我们目前正在使用 Windows 和匿名身份验证。问题是我们无法强制 Swagger 使用 Windows 身份验证来阻止用户。

有什么想法吗?

最佳答案

虽然令人沮丧,但到目前为止,我发现保护 Swagger 端点(通过 Swashbuckle)的最简单方法就是将它放在自己的路由下,然后使用一个简单的中间件来验证您之前想要的授权状态服务起来。这是为 NET Core 3.1 编写的,用于检查声明,因此您可能需要针对您的场景调整授权检查。显然,您仍然需要/想要要求对其记录的端点进行授权,但您不一定希望每个最终用户在任何情况下都可以访问文档。

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;

/// <summary>
/// Middleware to protect API Swagger docs
/// </summary>
public class SwaggerAuthorizationMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;

public SwaggerAuthorizationMiddleware(RequestDelegate next, ILogger<SwaggerAuthorizationMiddleware> logger)
{
_next = next;
_logger = logger;
}

public async Task Invoke(HttpContext context)
{
// If API documentation route and user isn't authenticated or doesn't have the appropriate authorization, then block
if (context.Request.Path.StartsWithSegments("/apidoc"))
&& (!context.User.Identity.IsAuthenticated || !context.User.HasClaim("ClaimName", "ClaimValue")))
{
_logger.LogWarning($"API documentation endpoint unauthorized access attempt by [{context.Connection.RemoteIpAddress}]");
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
return;
}

await _next.Invoke(context);
}
}

在启动期间:

app.UseAuthorization(); // before the middleware
app.UseMiddleware<SwaggerAuthorizationMiddleware>();
app.UseSwagger(c =>
{
c.RouteTemplate = "apidoc/swagger/{documentName}/swagger.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/apidoc/swagger/v1/swagger.json", "My Service");
c.RoutePrefix = "apidoc";
});

关于.net-core - 我们如何使用 Windows 身份验证保护 Swagger UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62454751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com