Ich versuche, Swagger in meine Asp.Net-Web-API zu implementieren, und ich stolperte auf ein Problem.SwashBuckle/Swagger - OAuth-Ressourceneigner Kennwortfluss
Ich bin mit dem Passwort Ressourceneigentümer fließen, und ich habe eine Arbeit um hinzuzufügen, um dies zu tun, die in der folgenden Stack-Überlauf Frage bedeckt: -
Swagger/Swashbuckle: OAuth2 with Resource Owner Password Credentials Grant
Ich habe alles funktioniert, das Bearer-Token wird über JavaScript zum Anfrage-Header im aktuellen Browser-Fenster hinzugefügt, aber die API-Aufrufe an die Controller-Methoden, die eine Autorisierung erfordern, geben immer noch "401 - Authorization Failed" zurück. Hier
ist das JavaScript, das den Inhaber Token bekommt und fügt den Header: -
$('#input_apiKey').change(function() {
var key = $('#input_apiKey')[0].value;
var credentials = key.split(':'); //username:password expected
$.ajax({
url: "http://localhost:42291/token",
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 window.SwaggerClient.ApiKeyAuthorization('Authorization', bearerToken, 'header'));
window.swaggerUi.api.clientAuthorizations.remove('api_key');
alert("Login Succesfull!");
},
error: function (xhr, ajaxoptions, thrownerror) {
alert("Login failed!");
}
});
});
Die Curl in der Antwort in Swagger wird: -
curl -X GET --header " Accept: application/json "--header " Authorization: Inhaber NqlSG-WyTx2zkYE8xFklGyZWlQDZdsCKZBHruEXvX47N7PAzw4-jZ4eH5D0yFzQTXj13RwKFFt1rUZt2fzWj1vR5UR87wdlKC3YvsTojYV4-3DsWwY7qYRfiKPuM0j09c3X5lnrtlBVJ1rBRUH0TLjfw_yGxgoLBwOJl9xyC1YWNoPOe2nzL4lMOHodAnMem0IBMJmUo3Rt575tnWAbBsQXWhlImDIxCZ XvkZdJtlXfIfBSUdY9gfRWL0ZjKbf7m2-yLzH0gpMAMuKaADmJlIudJc0d4SP1Nn2Kh2HuVH8CX4QgZuu4egl9N6rY2smorP2vBSC4_dC4CpmYYzOTu2wUnUhHDY2Q6NWl377ijDKwZLcW9jtD-2tBiEGmFuRV0mVGnh0zc4w9Ao9jPCdtrbSyGitgloBW-UG2bfyao3eE“ "http://localhost:42291/api/v1/claims"
Ich kann überhaupt mit dieser etwas falsch sehen.
ich dann Postman verwendet habe, die genau die gleichen URL-Aufruf zu nennen, die gleichen Zugriffstoken verwenden, die in dem JavaScript-Aufruf erzeugt wurden ...
Ratet mal, was ... es funktioniert gut.
EDIT
Ich habe versucht, von der Steuerung die Genehmigung Attribut zu entfernen, so dass ich die Anfrage überprüfen kann, wie es die Controller-Methode trifft.
Wenn Sie in den Anforderungsheadern nachsehen, ist die Autorisierungseigenschaft null.
Nicht sicher, warum das ist. Die CURL schlägt vor, dass sie in die Anfrage aufgenommen wurde.
EDIT 2
Ive enthalten meine Sicherheitsdefinitionen: -
"securityDefinitions": {
"oauth2": {
"type": "oauth2",
"description": "OAuth2 Password Grant",
"flow": "password",
"tokenUrl": "http://localhost:42291/token",
"scopes": {}
}
}
EDIT 3 Der Curl für diesen API-Aufruf in der Swagger Benutzeroberfläche angezeigt, wenn durch cURL direkt an der exponierte Befehlszeile funktioniert ohne Problem.
Jetzt bin ich völlig verwirrt.
Bitte verwenden Sie Fiddler (http: //www.telerik.com/fiddler), um den Unterschied zwischen den beiden Aufrufen (Swagger und Postman) zu überprüfen. Auch für einen Test würde ich ändern hinzufügen ('Authorization' ... hinzufügen ('someUniqueKey' ... – Dunken
Brauchen Sie wirklich 'securityDefinitions'? Ich habe nicht ... obwohl ich eine ältere Version brauche. – Dunken
Ich denke Diese Autorisierungsverweigerung ist früher in der Pipeline gescheitert, es scheint, ich bin nicht die einzige Person, die dieses Problem hat. Ich denke, es könnte etwas mit der vor dem Flug OPTIONS Anfrage zu tun, die von IIS entführt werden. Man dies saugt! – Derek