2016-09-27 5 views
1

Ich verwende Swagger, um die Dokumentation meiner REST-API zu erstellen. Entsprechend dem, was geschrieben wird, bietet die Swagger-Benutzeroberfläche keine Unterstützung für die Standardauthentifizierung (anders als die online editor). Mein Problem ist, dass eine meiner APIs ein POST ist, der Digest-Authentifizierung (nicht einmal Basis) erfordert.Swagger UI mit Digest-Authentifizierung

Eine mögliche Lösung, die ich gefunden habe, ist es, einen festen Benutzer hinzuzufügen: Pass-Authentifizierung Header in der Anfrage über JavaScript-Code. Dies sollte einfach gemäß der Swagger UI documentation (siehe Custom Header Parameters) erfolgen. Ich melde die inkriminierte Codezeile:

swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", "XXXX", "header")); 

Leider klappt es nicht. Das swaggerUi.api Feld Ergebnis nicht initialisiert (Null), nachdem ich das SwaggerUi-Objekt initialisieren, und als Konsequenz swaggerUi.api.clientAuthorizations ist nicht definiert. Ich habe versucht, solche Felder auf unterschiedliche Art und Weise zu initialisieren, was jedes Mal fehlschlug. Ich habe auch ähnliche Aufrufe der API versucht, die ich in Threads fand, die dieses Thema diskutierten, aber keiner von ihnen hat funktioniert. Hat jemand eine Idee dazu? Die Dokumentation ist nicht besonders klar.

Für Vollständigkeit, melde ich die js Snippet, wo ich initialisieren die Swagger UI

var urlPush = "./doc_push.yaml"; 
    window.swaggerUiPush = new SwaggerUi({ 
     url: urlPush, 
     dom_id: "swagger-ui-container-push", 
     supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'], 
     onFailure: function(data) { 
      log("Unable to Load SwaggerUI"); 
     }, 
     docExpansion: "list", 
     jsonEditor: false, 
     defaultModelRendering: 'model', 
     showRequestHeaders: false, 
    }); 

Antwort

0

mit SwaggerClient.PasswordAuthorization Versuchen statt SwaggerClient.ApiKeyAuthorization -

var username = $('#input_username').val(); 
var password = $('#input_password').val(); 
var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password); 
window.swaggerUi.api.clientAuthorizations.add("basicAuth", basicAuth); 
+0

Sicher, auf diese Weise den Header „Authorization fügt hinzu: Basic XXXXXXX "(Achtung, die neue Version möchte nicht, dass das Feld 'basic' vorhanden ist). Das Problem ist, dass es das Basic Authentication-Problem zu lösen scheint, nicht das Digest Authentication Problem (welches die MD% des Benutzers benötigt: realm: pass). – McKracken