2015-03-26 3 views
11

J'essaie d'utiliser Swashbuckle 5.0.x avec OAuth2. Je souhaite utiliser la subvention d'informations sur les mots de passe du propriétaire de ressource d'OAuth2. Je veux simplement demander d'abord un jeton et inclure ce jeton dans chaque requête (par exemple, pas besoin d'étendues).Swagger/Swashbuckle: OAuth2 avec les informations d'identification du mot de passe du propriétaire de ressource Grant

Quelqu'un peut-il vous aider? Comment dois-je configurer swagger/swashbuckle?

Répondre

10

OK, je l'ai résolu comme ceci:

Ajouter un JavaScript completion-gestionnaire à fanfaronnades:

config 
    .EnableSwagger(c => { 
        //do stuff 
    }) 
    .EnableSwaggerUi(c => { 
     c.InjectJavaScript(typeof(Startup).Assembly, "MyNamespace.SwaggerExtensions.onComplete.js"); 
    }); 

Prenez le nom d'utilisateur: mot de passe de la zone de texte api_key:

$('#input_apiKey').change(function() { 
    var key = $('#input_apiKey')[0].value; 
    var credentials = key.split(':'); //username:password expected 
    $.ajax({ 
     url: "myURL", 
     type: "post", 
     contenttype: 'x-www-form-urlencoded', 
     data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1], 
     success: function (response) { 
      var bearerToken = 'Bearer ' + response.access_token; 
      window.authorizations.add('key', new ApiKeyAuthorization('Authorization', bearerToken, 'header')); 
     }, 
     error: function (xhr, ajaxoptions, thrownerror) { 
      alert("Login failed!"); 
     } 
    }); 
}); 
+0

Pourriez-vous préciser où vous s'il vous plaît ajouté premier extrait de code « config.EnableSwagger ... "? Deuxième comme je vous ai ajouté à index.html, ai-je raison? – zubactik

+0

J'ai ajouté ceci dans mon Startup.cs (démarrage d'OWIN). Le second est un fichier JavaScript (onComplete.js), une ressource intégrée que j'ai ajoutée à mon projet API Web ASP.NET. – Dunken

+1

Je devais poster une nouvelle réponse afin de la faire fonctionner avec la dernière version –

15

Merci @Dunken. Votre réponse résoudre presque mon problème, mais pour le faire fonctionner avec la dernière Swashbuckle version que je devais changer un peu comme ce

$('#explore').off(); 

$('#explore').click(function() { 
    var key = $('#input_apiKey')[0].value; 
    var credentials = key.split(':'); //username:password expected 

$.ajax({ 
    url: "yourAuthEndpoint", 
    type: "post", 
    contenttype: 'x-www-form-urlencoded', 
    data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1], 
    success: function (response) { 
     var bearerToken = 'Bearer ' + response.access_token; 

     window.swaggerUi.api.clientAuthorizations.add('Authorization', new SwaggerClient.ApiKeyAuthorization('Authorization', bearerToken, 'header')); 
     window.swaggerUi.api.clientAuthorizations.remove("api_key"); 
     alert("Login successfull"); 
     }, 
     error: function (xhr, ajaxoptions, thrownerror) { 
     alert("Login failed!"); 
     } 
    }); 
}); 
+0

Parfait! Veuillez inclure le dernier '});' dans le bloc de code. – Neshta

+0

Terminé. Merci de me signaler un mauvais formatage. –

+0

Essayer de le faire. J'ai ajouté le script à mon projet à la racine. Je l'ai marqué comme une ressource intégrée, mais quand je reconstruis et charge l'interface utilisateur swagger il dit qu'il ne peut pas l'affiner. – ToddB