2016-08-04 5 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 웹 사이트에서 Windows (사이트 폴더에 대한 적절한 액세스 권한 사용) 또는 basic authentication을 사용하고 익명 인증을 사용하지 않도록 설정할 수 있습니다.

0

@bsoulier 답변은 완벽하게 합리적입니다. 또 다른 방법은 JavaScript/AJAX를 사용하는 것입니다.

엔드 포인트의 대부분의 인증으로 충분하기 때문에 실제 swagger-ui 색인 페이지를 보호하지 않았습니다.

그러나 모든 JavaScript는 index 페이지에 쉽게 삽입하거나 사용자 정의 index 페이지를 사용할 수 있습니다. 즉, 원하는 인증을 사용할 수 있습니다. 간단한 HTML 양식을 만들고 AJAX를 사용하여 사용자가 어떤 내용을 보거나 실제 swagger-ui 페이지로 리디렉션하기 전에 로그인하도록 전화를 걸기 만하면됩니다. SwaggerConfig에서 자신감-UI 페이지에

주입 자바 스크립트 파일 :

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

SwaggerConfig에서 자신감-UI 페이지에 사용자 정의 인덱스 페이지를 주입 :

c.CustomAsset("index", containingAssembly, "Your.Namespace.index.html"); 
관련 문제