web-dev-qa-db-ja.com

/ swagger / ui / indexページに認証を追加します-Swagger | Web API |スワッシュバックル

私はSwagger(Web API)プロジェクトに取り組んでいます。
アプリケーションを初めて実行すると、Swagger UIのログインページが表示されます。
したがって、ユーザーはSwagger UIページにアクセスするために最初にログインする必要がありますが、ユーザーが直接「 http://example.com/swagger/ui/index "」と入力すると、 Swagger UIページにアクセスします。

afaik swagger-uiはスワッシュバックルアセンブリによって提供されます。私のプロジェクトではソースが利用できません。

ユーザーがSwaggerUIページにログインしていない場合、ユーザーをログインページにリダイレクトさせるにはどうすればよいですか?

8
JerryGoyal

最後に、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 =>
{
    ...
});
14
JerryGoyal

認証されたユーザーだけが見ることができるようにSwaggerUIをロックダウンする方法を説明しているこのリンクを見ることができます

http://knowyourtoolset.com/2015/09/secure-web-apis-with-swagger-swashbuckle-and-oauth2-part-4/

5
Bhavik Patel

春のセキュリティログインページ

私の場合、それはSwaggerページではなく、Spring-Securityログインページです。ブートバージョン2.Xにはセキュリティ自動構成が含まれているため、build.gradleにspring-securityプラグインを追加する場合は、削除して再起動します。

0
Minjeong Lee