Как я могу представить "Authorization: Bearer" в спецификации Swagger (swagger.формат JSON)



Я пытаюсь передать, что схема аутентификации/безопасности требует установки заголовка следующим образом:



Authorization: Bearer <token>


это то, что я основал на swagger documentation:



securityDefinitions:
APIKey:
type: apiKey
name: Authorization
in: header
security:
- APIKey: []


спасибо заранее!

1814   3  

3 ответов:

может быть, это может помочь:

swagger: '2.0'
info:
  version: 1.0.0
  title: Based on "Basic Auth Example"
  description: >
    An example for how to use Auth with Swagger.

host: basic-auth-server.herokuapp.com
schemes:
  - http
  - https
securityDefinitions:
  Bearer:
    type: apiKey
    name: Authorization
    in: header
paths:
  /:
    get:
      security:
        - Bearer: []
      responses:
        '200':
          description: 'Will send `Authenticated`'
        '403': 
          description: 'You do not have necessary permissions for the resource'

вы можете скопировать и вставить его здесь: http://editor.swagger.io/#/ чтобы проверить результаты.

есть также несколько примеров в веб-редакторе swagger с более сложными конфигурациями безопасности, которые могут вам помочь.

аутентификация носителя в OpenAPI 3.0.0

OpenAPI 3.0 теперь поддерживает аутентификацию носителя / JWT изначально. Это определяется следующим образом:

openapi: 3.0.0
...

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT  # optional, for documentation purposes only

security:
  - bearerAuth: []

это поддерживается в Swagger UI 3.4.0+ и Swagger Editor 3.1.12+ (опять же, только для спецификаций OpenAPI 3.0!).

UI отобразит кнопку "авторизовать", которую вы можете нажать и ввести токен носителя (только сам токен, без префикса "носитель"). После этого "попробовать" запросы быть отправлены с Authorization: Bearer xxxxxx заголовок.

добавлять Authorization заголовок программно (Swagger UI 3.x)

если вы используете Swagger UI и, по какой-то причине, нужно добавить Authorization заголовок программно вместо того, чтобы пользователи нажимали "авторизовать" и вводили токен, вы можете использовать requestInterceptor. Это решение для Swagger UI 3.x; UI 2.x использовал другую технику.

// index.html

const ui = SwaggerUIBundle({
  url: "http://your.server.com/swagger.json",
  ...

  requestInterceptor: (req) => {
    req.headers.Authorization = "Bearer xxxxxxx"
    return req
  }
})

почему" принятый ответ " работает... но мне этого было мало

это работает в спецификации. По крайней мере swagger-tools (версия 0.10.1) проверяет, как действует.

а если вы используете другие инструменты, такие как swagger-codegen (версия 2.1.6) вы найдете некоторые трудности, даже если созданный клиент содержит определение аутентификации, например:

this.authentications = {
  'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};

нет никакого способа передать маркер в заголовок, прежде чем метод(конечная точка) будет называемый. Посмотрите на эту сигнатуру функции:

this.rootGet = function(callback) { ... }

это означает, что я только передаю обратный вызов (в других случаях параметры запроса и т. д.) без маркера, что приводит к неправильной сборке запроса на сервер.

Моя альтернатива

к сожалению, это не "красиво", но он работает, пока я не получу поддержку токенов JWT на Swagger.

примечание: которое обсуждается в

Итак, это аутентификация дескриптора, как стандартный заголовок. На path объект добавить заголовок paremeter:

swagger: '2.0'
info:
  version: 1.0.0
  title: Based on "Basic Auth Example"
  description: >
    An example for how to use Auth with Swagger.

host: localhost
schemes:
  - http
  - https
paths:
  /:
    get:
      parameters:
        - 
          name: authorization
          in: header
          type: string
          required: true
      responses:
        '200':
          description: 'Will send `Authenticated`'
        '403': 
          description: 'You do not have necessary permissions for the resource'

это создаст клиент с новым параметром на сигнатуре метода:

this.rootGet = function(authorization, callback) {
  // ...
  var headerParams = {
    'authorization': authorization
  };
  // ...
}

чтобы использовать этот метод в правильном направлении, просто передайте "полный строка"

// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);

и работает.

Comments

    Ничего не найдено.