2015-06-25 20 views
12

Attualmente ho distribuito un progetto swagger ma non riesco ad aggiungere alcune autorizzazioni di base. Quando fai clic su "Provalo!" pulsante è necessario accedere a un account per accedere ai risultati. Ho un account che voglio essere automaticamente utilizzato ogni volta che qualcuno cerca di accedere all'api. Bellow è il mio index.html per il progetto:Aggiunta dell'autorizzazione di base per Swagger-UI

<!DOCTYPE html> 
<html> 
<head> 
    <title>Swagger UI</title> 
    <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/> 
    <link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/> 
    <script src='lib/jquery-1.8.3.js' type='text/javascript'></script> 
    <script src='lib/jquery.slideto.min.js' type='text/javascript'></script> 
    <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script> 
    <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script> 
    <script src='lib/handlebars-1.0.rc.1.js' type='text/javascript'></script> 
    <script src='lib/underscore-min.js' type='text/javascript'></script> 
    <script src='lib/backbone-min.js' type='text/javascript'></script> 
    <script src='lib/swagger.js' type='text/javascript'></script> 
    <script src='lib/swagger-ui.js' type='text/javascript'></script> 
    <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script> 

    <script type="text/javascript"> 
    $(function() { 
     window.swaggerUi = new SwaggerUi({ 
       discoveryUrl:"https://localhost:8080/AssistAPI/api-docs.json", 
       apiKey:"", 
       dom_id:"swagger-ui-container", 
       supportHeaderParams: true, 
       supportedSubmitMethods: ['get', 'post', 'put'], 
       onComplete: function(swaggerApi, swaggerUi){ 
        if(console) { 
         console.log("Loaded SwaggerUI") 
         console.log(swaggerApi); 
         console.log(swaggerUi); 
        } 
        $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); 
       }, 
       onFailure: function(data) { 
        if(console) { 
         console.log("Unable to Load SwaggerUI"); 
         console.log(data); 
        } 
       }, 
       docExpansion: "none" 
      }); 
      window.authorizations.add("key", new ApiKeyAuthorization("Authorization", "XXXX"header")); 
      //window.authorizations.add("key", new ApiKeyAuthorization("username", "rmanda", "header")); 
      window.swaggerUi.load(); 
     }); 
    </script> 
</head> 

<body class="swagger-section"> 
<div id='header'> 
    <div class="swagger-ui-wrap"> 
    <a id="logo" href="http://swagger.io">swagger</a> 
    <form id='api_selector'> 
     <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div> 
     <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div> 
     <div class='input'><a id="explore" href="#">Explore</a></div> 
    </form> 
    </div> 
</div> 

<div id="message-bar" class="swagger-ui-wrap">&nbsp;</div> 
<div id="swagger-ui-container" class="swagger-ui-wrap"></div> 
</body> 
</html> 

Sto cercando di determinare dove si suppone che l'informazione di andare per consentire di base di autorizzazione. So che ha coinvolto le seguenti righe di codice, ma qualcuno può spiegarmi un po 'più in dettaglio dove le cose vanno esattamente. Sono venuto alla realizzazione che la documentazione per spavalderia su GitHub non è molto chiaro o utile

window.authorizations.add("key", new ApiKeyAuthorization("Authorization", "XXXX"header")); 
window.authorizations.add("key", new ApiKeyAuthorization("username", "password", "header")); 

risposta

5

L'impostazione corretta per intestazione autenticazione di base è:

Authorization: Basic username:password 

il nome utente String : Password esigenze per essere codificati usando RFC2045-MIME una variante di Base64. Vedi i dettagli qui: https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side

Poi, per configurare questa intestazione, si dovrebbe fare:

Considerando che la codifica Base64 per Username: Password è dXNlcm5hbWU6cGFzc3dvcmQ=

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

Ulteriori informazioni su questo qui: https://github.com/swagger-api/swagger-ui

+0

assicurarsi di aggiungere questa riga dopo la riga con: 'swaggerUi.load()' – Sean

0

È possibile utilizzare Spring Security e aggiungere il seguente schema

<"sec:intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')" /" > 

Chiederà l'autenticazione prima dello schermo di Swagger.

0

è possibile aggiungere/modificare questa funzione nel vostro dist/index.html presentare

function addApiKeyAuthorization(){ 
    var key = encodeURIComponent($('#input_apiKey')[0].value); 
    if(key && key.trim() != "") { 
     key = 'Basic '+key; 
     var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("Authorization", key, "header"); 
     window.swaggerUi.api.clientAuthorizations.add("Authorization", apiKeyAuth); 
     log("added key " + key); 
    } 
    } 

Oppure si può andare avanti nuova versione di Swagger 2.0, questo problema è noto è stato fissato.

0

ho avuto un problema simile, le risposte suggerite sono corrette nel mio caso finisco per aggiungere qualcosa in index.html come:

var myAuth = "Basic " + btoa("user:password"); 
window.authorizations.add("key", neSwaggerClient.ApiKeyAuthorization("Authorization", myAuth, "header")); 

ho aggiunto questo sia sul metodo di marcata addApiKeyAuthorization o è possibile creare un altro metodo, ma lo chiamano dopo il window.swaggerUi.load();

ma se avete la vostra spavalderia-ui esecuzione come "stand alone" con qualcosa come gulp o grugnire si può richiedere di configurare i servizi di accettare tutte le OPZIONI richiesta.

Mi sforzo un po ', spero che aiuti qualcuno.

Saluti