Ich versuche zu vermitteln, dass für das Authentifizierungs-/Sicherheitsschema ein Header wie folgt festgelegt werden muss:
Authorization: Bearer <token>
Dies ist, was ich basierend auf der Prahler Dokumentation :
securityDefinitions:
APIKey:
type: apiKey
name: Authorization
in: header
security:
- APIKey: []
Vielleicht kann das helfen:
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: basic-auth-server.herokuapp.com
schemes:
- http
- https
securityDefinitions:
Bearer:
type: apiKey
name: Authorization
in: header
paths:
/:
get:
security:
- Bearer: []
responses:
'200':
description: 'Will send `Authenticated`'
'403':
description: 'You do not have necessary permissions for the resource'
Sie können es hier kopieren und einfügen: http://editor.swagger.io/#/ , um die Ergebnisse zu überprüfen.
Es gibt auch einige Beispiele im Swagger-Editor-Web mit komplexeren Sicherheitskonfigurationen, die Ihnen helfen könnten.
OpenAPI 3. unterstützt jetzt die Bearer/JWT-Authentifizierung von Haus aus. Es ist wie folgt definiert:
openapi: 3.0.0
...
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT # optional, for documentation purposes only
security:
- bearerAuth: []
Dies wird in Swagger UI 3.4.0+ und Swagger Editor 3.1.12+ unterstützt (ebenfalls nur für OpenAPI 3.0-Spezifikationen!).
Die Benutzeroberfläche zeigt die Schaltfläche "Autorisieren" an, auf die Sie klicken und das Inhaber-Token eingeben können (nur das Token selbst, ohne das Präfix "Inhaber"). Danach werden Anfragen zum Ausprobieren mit dem Authorization: Bearer xxxxxx
Header.
Authorization
-Header programmgesteuert hinzufügen (Swagger UI 3.x)Wenn Sie die Swagger-Benutzeroberfläche verwenden und aus irgendeinem Grund die Kopfzeile Authorization
programmgesteuert hinzufügen müssen, anstatt dass die Benutzer auf "Autorisieren" klicken und das Token eingeben, können Sie die Zeichenfolge requestInterceptor
verwenden. Diese Lösung ist für Swagger UI 3.x ; UI 2.x verwendete eine andere Technik.
// index.html
const ui = SwaggerUIBundle({
url: "http://your.server.com/swagger.json",
...
requestInterceptor: (req) => {
req.headers.Authorization = "Bearer xxxxxxx"
return req
}
})
Warum "Accepted Answer" funktioniert ... aber es hat mir nicht gereicht
Dies funktioniert in der Spezifikation. Mindestens swagger-tools
(Version 0.10.1) validiert es als gültig.
Wenn Sie jedoch andere Tools wie swagger-codegen
(Version 2.1.6) verwenden, treten einige Probleme auf, auch wenn der generierte Client die Authentifizierungsdefinition enthält:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
Es gibt keine Möglichkeit, das Token in den Header zu übergeben, bevor die Methode (Endpunkt) aufgerufen wird. Sehen Sie sich diese Funktionssignatur an:
this.rootGet = function(callback) { ... }
Dies bedeutet, dass ich nur den Rückruf (in anderen Fällen Abfrageparameter usw.) ohne Token übergebe, was zu einer fehlerhaften Erstellung der Anfrage an den Server führt.
Meine Alternative
Leider ist es nicht "hübsch", aber es funktioniert, bis ich JWT Tokens-Unterstützung für Swagger bekomme.
Hinweis: Welche wird in diskutiert
Die Authentifizierung wird also wie bei einem Standardheader behandelt. Fügen Sie an das Objekt path
einen Header-Parameter an:
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'
Dadurch wird ein Client mit einem neuen Parameter für die Methodensignatur generiert:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
Um diese Methode richtig anzuwenden, übergeben Sie einfach die "vollständige Zeichenfolge".
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
Und funktioniert.