wake-up-neo.com

Wie kann ich "Autorisierung: Inhaber <Token>" in einer Swagger-Spezifikation (swagger.json) darstellen?

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: []
89
Elmer Thomas

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.

115
David Lopez

Trägerauthentifizierung in OpenAPI 3.0.0

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
  }
})
30
Helen

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.

16
Paulo Oliveira