【问题标题】:Add Authentication to /swagger/ui/index page - Swagger | Web API | Swashbuckle向 /swagger/ui/index 页面添加身份验证 - Swagger |网络 API |花花公子
【发布时间】:2019-05-11 19:07:34
【问题描述】:

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

afaik swagger-ui 由 swashbuckle 组件提供服务。该源在我的项目中不可用。

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

【问题讨论】:

    标签: c# authentication asp.net-web-api swagger-ui swashbuckle


    【解决方案1】:

    最后,我用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 =>
    {
        ...
    });
    

    【讨论】:

    • 页面重定向不正确
    • 对于 ASP.Net 核心呢?我应该在 SwaggerAccessMessageHandler.cs 文件中放入哪个文件夹?
    • @superninja 你找到解决办法了吗?因为我需要同样的 asp.net core api
    【解决方案2】:

    spring-security login page

    就我而言,这不是招摇页面,而是 spring-security 登录页面。 启动版本 2.X 包含安全自动配置,因此如果您在 build.gradle 中添加 spring-security 插件,请删除并重新启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2021-04-05
      • 1970-01-01
      • 2017-02-16
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多