将身份验证添加到 /swagger/ui/index 页面 - Swagger |网页 API |虚张声势

Add Authentication to /swagger/ui/index page - Swagger | Web API | Swashbuckle

我正在从事 Swagger(Web API)项目。
当我第一次 运行 应用程序时,它显示了 Swagger 的登录页面 UI。
因此,用户首先必须登录才能访问 Swagger UI 页面,但是,如果用户直接输入“http://example.com/swagger/ui/index”,那么他就可以访问 Swagger UI 页面。

afaik the swagger-ui 由 swashbuckle 组件提供服务。我的项目中没有源代码。

如果用户没有登录 Swagger UI 页面,我如何让他重定向到登录页面?

最后,我用DelegtingHandler解决了,我是这样的:
创建文件 SwaggerAccessMessageHandler.cs 并将其添加到 App_Start 文件夹中。

using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
public class SwaggerAccessMessageHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (IsSwagger(request) && !Thread.CurrentPrincipal.Identity.IsAuthenticated)
        {
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Redirect);
            // Redirect to login URL
            string uri = string.Format("{0}://{1}", request.RequestUri.Scheme, request.RequestUri.Authority);    
            response.Headers.Location = new Uri(uri);
            return Task.FromResult(response);
        }
        else
        {
            return base.SendAsync(request, cancellationToken);
        }
    }

    private bool IsSwagger(HttpRequestMessage request)
    {
        return request.RequestUri.PathAndQuery.Contains("/swagger");
    }
}

接下来,在启用 Swagger 之前在 SwaggeConfig.cs 中连接处理程序,如下所示:

GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler());

GlobalConfiguration.Configuration.EnableSwagger(c =>
{
    ...
});

spring-security login page

在我的例子中,那不是 swagger 页面,而是 spring-security 登录页面。 引导版本 2.X 包括安全自动配置,因此如果您在 build.gradle 中添加 spring-security 插件,删除并重新启动。