Por que "Resposta aceita" funciona ... mas não foi o suficiente para mim
Isso funciona na especificação. Pelo menos swagger-tools
(versão 0.10.1) o valida como válido.
Mas se você estiver usando outras ferramentas como swagger-codegen
(versão 2.1.6) encontrará algumas dificuldades, mesmo que o cliente gerado contenha a definição de Autenticação, como esta:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
Não há como passar o token para o cabeçalho antes que o método (ponto de extremidade) seja chamado. Olhe para esta assinatura de função:
this.rootGet = function(callback) { ... }
Isso significa que eu apenas passo o retorno de chamada (em outros casos, parâmetros de consulta, etc.) sem um token, o que leva a uma construção incorreta da solicitação para o servidor.
Minha alternativa
Infelizmente, não é "bonito", mas funciona até que eu obtenha suporte para tokens JWT no Swagger.
Nota: que está sendo discutido em
Portanto, ele trata a autenticação como um cabeçalho padrão. No path
objeto, anexe um parâmetro de cabeçalho:
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'
Isso irá gerar um cliente com um novo parâmetro na assinatura do método:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
Para usar este método da maneira certa, basta passar a "string completa"
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
E funciona.