2016-08-04 6 views

答えて

1

私は以下でこれを達成:

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { 
     string username = null; 
     if (Thread.CurrentPrincipal.Identity != null && Thread.CurrentPrincipal.Identity.Name != null) { 
      username = Thread.CurrentPrincipal.Identity.Name.ToLower(); 
     } 
     if (IsSwagger(request) && username != "Admin") { 
      var response = request.CreateResponse(HttpStatusCode.Unauthorized); 
      return Task.FromResult(response); 
     } 
     else { 
      return base.SendAsync(request, cancellationToken); 
     } 
    } 

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

リンクhttps://github.com/domaindrivendを参照できます。 ev/Swashbuckle/issues/601 –

0

IISでホストされているプロジェクトの場合は、IIS WebサイトでWindows(サイトフォルダへの適切なアクセス権を持つ)またはbasic authenticationのいずれかを使用して匿名認証を無効にすることができます。

0

@bsoulier答えは完全に合理的です。別の方法は、JavaScript/AJAXを使用することです。

エンドポイントのほとんどの認証で十分であるため、実際のswagger-uiインデックスページの保護は試していません。

いずれのJavaScriptもindexページに簡単に挿入することも、独自のカスタムindexページを使用することもできます。つまり、必要な認証を使用できます。シンプルなHTMLフォームを作成し、AJAXを使用してユーザーにログインしてからコンテンツを見ることができるようにするか、実際のswagger-uiページにリダイレクトするだけです。

SwaggerConfigから威張っ-UIページにJavaScriptファイルを注入:SwaggerConfigから威張っ-UIページにカスタムインデックスページを注入

c.InjectJavaScript(thisAssembly, "Your.Namespace.testScript1.js"); 

c.CustomAsset("index", containingAssembly, "Your.Namespace.index.html"); 
関連する問題