Авторизация Oauth2 в NelmioApiDocBundle

Я пытаюсь использовать NelmioApiDocBundle для документации по API проектов Symfony 3.4, а также пытаюсь обойтись без авторизации OAuth 2 для доступа к API проекта.

До сих пор я следовал этому руководству о том, как заставить работать FOSOAuthServerBundle. Пока я могу 1.) создать клиента с помощью командной строки:

php bin / console fos: oauth-сервер: create-client --redirect-uri = "___" --grant-type = "authorization_code" --grant-type = "password" --grant-type = "refresh_token" - -grant-type = "token" --grant-type = "client_credentials"

2.) Я также могу получить токен доступа вручную, посетив этот URL на моем сервере

http://127.0.0.1:8000/oauth/v2/token?client_id=______&client_secret=________&grant_type=client_credentials

3.) Я могу использовать токен для доступа к областям моего проекта Symfony, требующим OAuth Access, включив токен в параметр GET

Тем не менее, в Авторизациях NelmioApiDocBundle я не могу заставить это работать до конца. Вот скриншот:

NelmioApiDocBundle Страница авторизации

Если ввести мой client_id и секретный ключ, он переместится на страницу входа, как и ожидалось. Я могу ввести свою регистрационную информацию и, как и ожидалось, переместится на страницу подтверждения или отклонения. В этот момент, если я нажимаю Утвердить или Запретить, он пытается использовать "redirect_uri" http://localhost:3200/oauth2-redirect.html. Что бы я ни делал, я не могу изменить URI перенаправления.

Как получить правильный URI перенаправления?

1 ответ

Решение

Хорошо, это было на самом деле легко исправить. Вам нужно добавить одну строку:

oauth2RedirectUrl: 'URLhere',

в файл init-swagger-ui.js, который расположен (Symfony 3.4) в web/bundles/nelmioapidoc/

Окончательный файл в итоге выглядел так:

window.onload = () => {
  const data = JSON.parse(document.getElementById('swagger-data').innerText);
  const ui = SwaggerUIBundle({
      oauth2RedirectUrl: 'URLhere',
    spec: data.spec,
    dom_id: '#swagger-ui',
    validatorUrl: null,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: 'StandaloneLayout'
  });

  window.ui = ui;
};

Также вы, вероятно, захотите скачать файл oauth2-redirect.html из проекта Swagger, чтобы включить его для фактического перенаправления.

Другие вопросы по тегам