Swagger UI Authorization с использованием IdentityServer4 возвращает недопустимый redirect_uri - PullRequest
0 голосов
/ 17 января 2019

Я использую Swashbuckle для авторизации Swagger с использованием IdentityServer. Я следовал за этими шагами: https://www.scottbrady91.com/Identity-Server/ASPNET-Core-Swagger-UI-Authorization-using-IdentityServer4.

Это запись журнала от IdentityServer:

2019-01-17 19:17:41.031 +01:00 [ERR] Invalid redirect_uri: 
http://localhost:3200/oauth2-redirect.html
{
  "ClientId": "demo_api_swagger",
  "ClientName": "Swagger UI for API",
  "AllowedRedirectUris": [
    "http://localhost:5001/oauth2-redirect.html"
  ],
  "SubjectId": "anonymous",
  "RequestedScopes": "",
  "Raw": {
    "response_type": "token",
    "client_id": "demo_api_swagger",
    "redirect_uri": "http://localhost:3200/oauth2-redirect.html",
    "scope": "api_data openid profile",
    "state": "VGh1IEph etc.."
  }
}

Запись в журнале гласит:

Invalid redirect_uri: http://localhost:3200/oauth2-redirect.html

но я нигде не задаю этот адрес и понятия не имею, откуда он. Как я могу установить правильный адрес для перенаправления?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Адрес перенаправления с портом 3200 жестко запрограммирован в интерфейсе Swagger.

К счастью, существует простой обходной путь, добавляющий ключ oauth2RedirectUrl в инициализацию Swagger.

Swaggerinit.js (добавлено в папку wwwroot/assets):

function createSwaggerUi() {
    var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '');

    const ui = SwaggerUIBundle({
        url: full + "/swagger/v2/swagger.json",
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
            SwaggerUIBundle.presets.apis,
            SwaggerUIStandalonePreset
        ],
        plugins: [
            SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout",

        oauth2RedirectUrl: full + "/oauth2-redirect.html"
    })

    window.ui = ui;
}

window.addEventListener("load", function () {
    createSwaggerUi();
});

Startup.cs:

app.UseSwaggerUI(options =>
{
    options.RoutePrefix = string.Empty;

    ...

    options.InjectJavascript("../assets/swaggerinit.js");
});

Это работает с Swashbuckle.AspNetCore.SwaggerUI, версия = 4.0.1.0.

0 голосов
/ 17 января 2019

Это происходит из конфигурации для Client на стороне Identity Server 4. В примере статьи он установлен на http://localhost:5001/oauth2-redirect.html, поэтому измените его на подходящий для вас:

new Client {
    ClientId = "demo_api_swagger",
    ClientName = "Swagger UI for demo_api",
    AllowedGrantTypes = GrantTypes.Implicit,
    AllowAccessTokensViaBrowser = true,
    RedirectUris = {"http://localhost:5001/oauth2-redirect.html"},
    AllowedScopes = {"demo_api"}
};
...