Pourquoi "Réponse acceptée" fonctionne ... mais ce n'était pas suffisant pour moi
Cela fonctionne dans la spécification. Au moins swagger-tools
(version 0.10.1) le valide comme un fichier valide.
Mais si vous utilisez d'autres outils comme swagger-codegen
(version 2.1.6), vous rencontrerez des difficultés, même si le client généré contient la définition d'authentification, comme ceci:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
Il n'y a aucun moyen de passer le jeton dans l'en-tête avant que la méthode (point de terminaison) ne soit appelée. Regardez dans cette signature de fonction:
this.rootGet = function(callback) { ... }
Cela signifie que je transmets uniquement le rappel (dans d'autres cas, les paramètres de requête, etc.) sans jeton, ce qui conduit à une construction incorrecte de la demande au serveur.
Mon alternative
Malheureusement, ce n'est pas "joli" mais cela fonctionne jusqu'à ce que j'obtienne le support des jetons JWT sur Swagger.
Remarque: ce qui est discuté dans
Donc, il gère l'authentification comme un en-tête standard. Sur l' path
objet, ajoutez un paramètre d'en-tête:
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'
Cela générera un client avec un nouveau paramètre sur la signature de la méthode:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
Pour utiliser cette méthode de la bonne manière, il suffit de passer la "chaîne complète"
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
Et fonctionne.