12

OAuth2 で Swashbuckle 5.0.x を使用しようとしています。OAuth2 の Resource Owner Password Credentials Grant を使用したいと考えています。私は基本的に、最初にトークンを要求し、このトークンを各要求に含めたいだけです (たとえば、スコープは必要ありません)。

誰でもこれを手伝ってもらえますか?swagger/swashbuckle を構成するにはどうすればよいですか?

4

4 に答える 4

15

ありがとう@ダンケン。あなたの答えは私の問題をほぼ解決しますが、最新のSwashbuckleバージョンで動作させるには、このように少し変更する必要がありました

$('#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!");
       }
    });
});
于 2015-07-30T14:31:07.933 に答える
11

OK、私は次のように解決しました:

JavaScript 補完ハンドラーを swagger に追加します。

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

API_KEY テキストボックスから username:password を取得します。

$('#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!");
        }
    });
});
于 2015-05-07T08:56:16.840 に答える