2016-08-04 90 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 /問題/ 601 –

0

如果您的項目如果託管在IIS下,則可以在您的IIS網站上使用Windows(對站點文件夾具有正確的訪問權限)或basic authentication,並禁用匿名身份驗證。

0

@bsoulier答案是完全合理的。另一種方法是使用JavaScript/AJAX。

我還沒有嘗試保護實際的swagger-ui索引頁面,因爲大多數時候在端點上進行身份驗證就足夠了。

但是任何JavaScript都可以輕鬆注入到index頁面中,或者您可以使用自己的自定義index頁面。這意味着您可以使用任何您想要的身份驗證。只需創建一個簡單的HTML表單,並使用AJAX撥打電話登錄用戶,然後再允許他們查看任何內容,或者在將其重定向到真正的swagger-ui頁面之前。

注漿JavaScript文件上傳到招搖的UI頁面從SwaggerConfig

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

注射自定義索引頁面進入招搖的UI頁面從SwaggerConfig

c.CustomAsset("index", containingAssembly, "Your.Namespace.index.html");