Почему "Принятый ответ" работает ... но мне этого было недостаточно
Это работает в спецификации. По крайней мере 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
объекту добавьте параметр заголовка:
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);
И работает.