Выпуск «Авторизация: Носитель <token>» в Swagger openAPI Аннотации - PullRequest
0 голосов
/ 08 марта 2019

Я использую эти пакеты (установленные через композитор)

"swagger-api / swagger-ui": "^ 3.0",
"zircote / swagger-php": "~ 2.0| 3. * "

В моем контроллере def у меня есть эти аннотации

/**
 * @OA\Info(title="My API", version="0.1")
 * @OA\Schemes(format="http")
 * @OA\SecurityScheme(
 *      securityScheme="bearerAuth",
 *      in="header",
 *      name="Authorization",
 *      type="http",
 *      scheme="Bearer",
 *      bearerFormat="JWT",
 * ),
 * @OA\Tag(
 *     name="Auth",
 *     description="Auth endpoints",
 * )
 * @OA\Tag(
 *     name="Users",
 *     description="Users endpoints",
 * )
 */
class Controller extends BaseController

Тогда у меня есть метод

/**
 * 
 * @OA\Get(
 *      path="/users",
 *      operationId="getListOfUsers",
 *      tags={"Users"},
 *      description="Get list of users",
 *      security={{"bearerAuth":{}}}, 
 *      @OA\Parameter(
 *         name="Authorization",
 *         in="header",
 *         required=true,
 *         description="Bearer {access-token}",
 *         @OA\Schema(
 *              type="bearerAuth"
 *         ) 
 *      ), 
 *      @OA\Response(
 *          response=200,
 *          description="Get list of users.",
 *          @OA\JsonContent(type="object",
 *              @OA\Property(property="message", type="string"),
 *              @OA\Property(property="data", type="array",
 *                  @OA\Items(type="object",
 *                      @OA\Property(property="id", type="integer"),
 *                      @OA\Property(property="name", type="string"),
 *                      @OA\Property(property="email", type="string"),
 *                  ),
 *              ),
 *          ),
 *       ),
 *       @OA\Response(response=401, description="Unauthorized"),
 *       @OA\Response(response=404, description="Not Found"),
 * )
 * 
 * @return JsonResponse
 */
public function users()

Итак, когда я пытаюсьпроверить этот маршрут через пользовательский интерфейс swagger, я получаю сообщение об ошибке

401, "message": "Не аутентифицирован".

Когда я проверял заголовок (Firefox), у меня не быловидел

Авторизация: Носитель {{access-token}}

, но у меня есть мой токен в

Cookie: XSRF-TOKEN =eyJpdiI6Ik5COUV5Y1ltRTM4eXNsRlpLY2ptTGc9PSIsInZhbHVlIjoiNDFCbG95c1RHSHRFT0IyWWZ4aWFRQVJ6RHhTS1A4SFJiQXp2amlQc3RCUFRUWWs5R3RQQ0ZlakdFNnlvRm50MSIsIm1hYyI6ImM ...

Swagger UI не посылает заголовок правильно.Что не так в аннотациях?Спасибо

1 Ответ

2 голосов
/ 13 марта 2019

Авторизация не имеет ничего общего с XSRF-TOKEN. У меня тоже была такая же проблема, и я решил ее после нескольких часов поиска в Google. Вот изменения, которые вы можете попробовать:

Удалите эти строки:

 *      @OA\Parameter(
 *         name="Authorization",
 *         in="header",
 *         required=true,
 *         description="Bearer {access-token}",
 *         @OA\Schema(
 *              type="bearerAuth"
 *         ) 
 *      ), 

И измените это:

 * @OA\SecurityScheme(
 *      securityScheme="bearerAuth",
 *      in="header",
 *      name="Authorization",
 *      type="http",
 *      scheme="Bearer",
 *      bearerFormat="JWT",
 * ),

до

* @OA\SecurityScheme(
*      securityScheme="bearerAuth",
*      in="header",
*      name="bearerAuth",
*      type="http",
*      scheme="bearer",
*      bearerFormat="JWT",
* ),

Обратите внимание, что «Носитель» и «Носитель» различаются.

...