Swagger-php с Swagger-ui не работает с базовой аутентификацией - PullRequest
0 голосов
/ 07 мая 2018

Я использую swagger-ui и swagger-json, сгенерированные с помощью swagger-php. Я не могу выполнить базовую аутентификацию для использования моей конечной точки. Я могу получить файл Swagger JSON из моего приложения, но не использовать открытую конечную точку. Я не понимаю, что я неправильно понимаю. Если кто-то может показать мне полный пример с базовой аутентификации в Swagger 2.0? CORS включен и полностью работает. Swagger-ui работает на localhost: 3000 с nodejs, а мое приложение запускает php с nginx на localhost: 80.

Я использую swagger-ui-dist 3.14.1, который совместим с swagger 2.0 (swagger-php равен 2.0)

3.14.1 | 2018-05-04 | 2.0, 3.0 | tag v3.14.1

Я использую эти комментарии SWG в своих контроллерах для использования basicAuth (на стороне сервера)

/**
 *  @SWG\SecurityScheme(
  *      securityDefinition="basicAuth",
  *      name="authorization",
  *      type="basic",
  *      scheme="http"
  *  )
  */

и это комментарии

/**
 * @SWG\Get(
 *     description="Get all catalog",
 *     path="/ott/catalogs",
 *     produces={"application/json"},
 *     security = {"basicAuth"},
 *     @SWG\Response(response="200", description="Get all catalogs"),
 *     @SWG\Response(response="401",description="You are not authorized")
 *     )
 * )
 */

Вот мой код на стороне клиента:

 window.onload = function() {
         // Build a system
       const ui = SwaggerUIBundle({
         url: "http://ott/ott/tools/swagger",
         host: 'ott',
         basePath: 'ott/',
         schemes: 'http',
         enableCORS: true,
         dom_id: '#swagger-ui',
         deepLinking: true,
         validatorUrl:null,
         presets: [
           SwaggerUIBundle.presets.apis,
           SwaggerUIStandalonePreset
         ],
         plugins: [
           SwaggerUIBundle.plugins.DownloadUrl
         ],
         layout: "StandaloneLayout",
         requestInterceptor: (req) => {
             if (req.loadSpec) {
                 let hash = btoa("*******" + ":" + "********");
                 req.headers.Authorization = "Basic " + hash;
             }
             return req
         },
           onComplete : () => {
             ui.preauthorizeBasic("basicAuth","*******","*******")
           }
       });
       window.ui = ui

Когда я нажимаю на замок, у меня появляется первая ошибка в моей консоли, а затем, когда я пытаюсь получить мои каталоги, я получаю 401 - не авторизовано, потому что заголовок Basic Authentication не отправляется.

capture du 2018-05-07 16-44-38

1 Ответ

0 голосов
/ 07 мая 2018

Аннотации выглядят неправильно.Измените @SWG\SecurityScheme на:

/**
 *  @SWG\SecurityScheme(
  *      securityDefinition="basicAuth",
  *      type="basic"
  *  )
  */

(без атрибутов name и scheme) и измените значение security в @SWG\Get следующим образом:

/**
 * @SWG\Get(
 *     ...
 *     security = {{"basicAuth": {}}},
 *     ...
...