2016-08-04 23 views

Antwort

1

ich erreichte dies mit dem folgenden:

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

Sie können den Link verweisen https://github.com/domaindrivend ev/Swashbuckle/Ausgaben/601 –

0

Wenn Ihr Projekt unter IIS gehostet wird, können Sie entweder Windows (mit den entsprechenden Zugriffsrechten für den Standortordner) oder basic authentication auf Ihrer IIS-Website verwenden und die anonyme Authentifizierung deaktivieren.

0

@Bsoulier Antwort ist völlig in Ordnung. Eine andere Möglichkeit ist die Verwendung von JavaScript/AJAX.

Ich habe nicht versucht, die tatsächliche swagger-ui Indexseite zu sichern, da die meiste Zeit Authentifizierung auf den Endpunkten genug ist.

Aber jedes Javascript kann leicht in die index Seite eingefügt werden oder Sie können Ihre eigene benutzerdefinierte index Seite verwenden. Das bedeutet, dass Sie jede gewünschte Authentifizierung verwenden können. Erstellen Sie einfach ein einfaches HTML-Formular und verwenden Sie AJAX, um den Benutzer anzumelden, bevor er ihnen erlaubt, Inhalte zu sehen oder sie auf die echte Seite von swagger-ui umzuleiten.

Injecting JavaScript-Dateien in die Prahlerei-ui Seite von SwaggerConfig:

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

Injizieren benutzerdefinierte Indexseite in die Prahlerei-ui Seite von SwaggerConfig:

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