将身份验证添加到 /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 插件,删除并重新启动。
我正在从事 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 插件,删除并重新启动。