Dlaczego „Accepted Answer” działa… ale to mi nie wystarczało
Działa to w specyfikacji. Przynajmniej swagger-tools
(wersja 0.10.1) sprawdza, czy jest on prawidłowy.
Ale jeśli używasz innych narzędzi, takich jak swagger-codegen
(wersja 2.1.6), napotkasz pewne trudności, nawet jeśli wygenerowany klient zawiera definicję uwierzytelniania, taką jak ta:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
Nie ma możliwości przekazania tokenu do nagłówka przed wywołaniem metody (punktu końcowego). Spójrz na ten podpis funkcji:
this.rootGet = function(callback) { ... }
Oznacza to, że przekazuję tylko wywołanie zwrotne (w innych przypadkach parametry zapytania itp.) Bez tokena, co prowadzi do nieprawidłowej kompilacji żądania do serwera.
Moja alternatywa
Niestety nie jest „ładna”, ale działa, dopóki nie otrzymam wsparcia JWT Tokens na Swagger.
Uwaga: która jest omawiana w
Tak więc uwierzytelnianie uchwytu jest takie jak standardowy nagłówek. Do path
obiektu dołącz parametr nagłówka:
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'
Spowoduje to wygenerowanie klienta z nowym parametrem w sygnaturze metody:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
Aby użyć tej metody we właściwy sposób, po prostu podaj „pełny ciąg”
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
I działa.