私はSwagger(Web API)プロジェクトに取り組んでいます。
アプリケーションを初めて実行すると、Swagger UIのログインページが表示されます。
したがって、ユーザーはSwagger UIページにアクセスするために最初にログインする必要がありますが、ユーザーが直接「 http://example.com/swagger/ui/index "」と入力すると、 Swagger UIページにアクセスします。
afaik swagger-uiはスワッシュバックルアセンブリによって提供されます。私のプロジェクトではソースが利用できません。
ユーザーがSwaggerUIページにログインしていない場合、ユーザーをログインページにリダイレクトさせるにはどうすればよいですか?
最後に、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 =>
{
...
});
認証されたユーザーだけが見ることができるようにSwaggerUIをロックダウンする方法を説明しているこのリンクを見ることができます
http://knowyourtoolset.com/2015/09/secure-web-apis-with-swagger-swashbuckle-and-oauth2-part-4/
私の場合、それはSwaggerページではなく、Spring-Securityログインページです。ブートバージョン2.Xにはセキュリティ自動構成が含まれているため、build.gradleにspring-securityプラグインを追加する場合は、削除して再起動します。