Как я могу представить "Authorization: Bearer" в спецификации Swagger (swagger.формат JSON)
Я пытаюсь передать, что схема аутентификации/безопасности требует установки заголовка следующим образом:
Authorization: Bearer <token>
это то, что я основал на документация swagger:
securityDefinitions:
APIKey:
type: apiKey
name: Authorization
in: header
security:
- APIKey: []
спасибо заранее!
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
}
})
почему" принятый ответ " работает... но мне этого было мало!--10-->
это работает в спецификации. По крайней мере!--5--> (версия 0.10.1) проверяет, как действует.
а если вы используете другие инструменты, такие как swagger-codegen
(версия 2.1.6) вы найдете некоторые трудности, даже если созданный клиент содержит определение аутентификации, например:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
нет способа передать токен в заголовок до того, как метод (конечная точка) будет называемый. Посмотрите на эту сигнатуру функции:
this.rootGet = function(callback) { ... }
это означает, что я только передаю обратный вызов (в других случаях параметры запроса и т. д.) без маркера, что приводит к неправильной сборке запроса на сервер.
Моя альтернатива
к сожалению, это не "красиво", но он работает, пока я не получу поддержку токенов JWT на Swagger.
Примечание: который обсуждается в
- безопасность: добавлена поддержка для заголовка авторизации с носителем схема проверки подлинности #583
- расширяемость безопасности определения? #460
Итак, это аутентификация дескриптора как стандартный заголовок. On 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);
и работает.