Swagger / OpenAPI Bearer auth с пользовательским именем заголовка - PullRequest
1 голос
/ 03 июня 2019

Я определяю (небольшими частями) существующий API ( Samanage ), используя OpenAPI для помощи в некоторой работе по интеграции.

Мне нужно пройти аутентификацию, используя аутентификацию Bearer, но отправив токен в заголовке, отличном от Authorize.

Сервер ожидает аутентификацию на предъявителя в заголовке с именем X-Samanage-Authorization, как в этом примере:

curl -H "X-Samanage-Authorization: Bearer <TokenGoesHere>" -H 'Accept: application/vnd.samanage.v2.1+json' -H 'Content-Type: application/json' -X GET https://api.samanage.com/incidents.json

Мне известно о https://swagger.io/docs/specification/authentication/bearer-authentication/,, но, похоже, это не помогает мне полностью.

This (OpenAPI 3)

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
...
security:
- bearerAuth: []

В результате получается заголовок аутентификации с именем по умолчанию (Authorization)

curl -X GET "https://api.samanage.com/incidents/12341234.json" -H "accept: application/json" -H "Authorization: Bearer <TokenGoesHere>"

Что тогда не получается (401).

Я чувствую, что хочу этого:

components:
  securitySchemes:
    bearerAuth:
      type: http
      name: X-Samanage-Authorization
      in: header
      scheme: bearer

Но это не проходит проверку в редакторе Swagger, так как я считаю, что type из http не допускает компонент name (как это делает тип apiKey). Я не мог полностью понять документы здесь , если честно.

Я читал о Расширениях спецификаций , но, будучи совершенно новым для OpenAPI, я не смог найти примеров того, как на самом деле реализовать то, что мне нужно.

Любое понимание высоко ценится!

1 Ответ

0 голосов
/ 03 июня 2019

type: http - для HTTP-аутентификации, определенной RFC 7235 и Реестром схемы аутентификации HTTP IANA . HTTP-аутентификация по определению использует заголовок Authorization.

Чтобы использовать пользовательское имя заголовка, вам нужно определить его как ключ API (type: apiKey):

components:
  securitySchemes:
    bearerAuth:
      type: apiKey
      name: X-Samanage-Authorization
      in: header

Обратите внимание, что, поскольку это нестандартная схема Bearer, клиенты должны будут вручную добавить префикс "Bearer" к значению токена. Например, когда вы нажимаете «Авторизовать» в пользовательском интерфейсе Swagger, вам нужно будет ввести «TOKEN на предъявителя» вместо просто «TOKEN».

...