Perché "Risposta accettata" funziona ... ma non era abbastanza per me
Questo funziona nelle specifiche. Almeno swagger-tools
(versione 0.10.1) lo convalida come valido.
Ma se stai usando altri strumenti come swagger-codegen
(versione 2.1.6) troverai alcune difficoltà, anche se il client generato contiene la definizione di autenticazione, come questa:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
Non è possibile passare il token nell'intestazione prima che venga chiamato il metodo (endpoint). Guarda in questa firma della funzione:
this.rootGet = function(callback) { ... }
Ciò significa che passo solo il callback (in altri casi parametri di query, ecc.) Senza un token, il che porta a una compilazione errata della richiesta al server.
La mia alternativa
Sfortunatamente, non è "carino" ma funziona finché non ricevo il supporto per i token JWT su Swagger.
Nota: di cui si discute in
Quindi gestisce l'autenticazione come un'intestazione standard. Su path
oggetto aggiungere un paremeter intestazione:
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'
Questo genererà un client con un nuovo parametro sulla firma del metodo:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
Per utilizzare questo metodo nel modo giusto, basta passare la "stringa completa"
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
E funziona.