validator hub for example swagger swagger-2.0 swagger-editor

hub - ¿Cómo puedo representar ''Autorización: portador<token>'' en una especificación Swagger(swagger.json)



swagger ui url (3)

Estoy tratando de transmitir que el esquema de autenticación / seguridad requiere establecer un encabezado de la siguiente manera:

Authorization: Bearer <token>

Esto es lo que he basado en la documentación de swagger :

securityDefinitions: APIKey: type: apiKey name: Authorization in: header security: - APIKey: []


Autenticación de portador en OpenAPI 3.0.0

OpenAPI 3.0 ahora admite la autenticación Bearer / JWT de forma nativa. Se define así:

openapi: 3.0.0 ... components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT # optional, for documentation purposes only security: - bearerAuth: []

Esto es compatible con Swagger UI 3.4.0+ y Swagger Editor 3.1.12+ (nuevamente, ¡solo para especificaciones OpenAPI 3.0!).

La interfaz de usuario mostrará el botón "Autorizar", en el que puede hacer clic e ingresar el token del portador (solo el token en sí, sin el prefijo "Bearer"). Después de eso, las solicitudes de "probar" se enviarán con el encabezado Authorization: Bearer xxxxxx .

Agregar encabezado de Authorization programación (Swagger UI 3.x)

Si usa la interfaz de usuario de Swagger y, por alguna razón, necesita agregar el encabezado de Authorization programación en lugar de hacer que los usuarios requestInterceptor clic en "Autorizar" e ingresen el token, puede usar requestInterceptor . Esta solución es para Swagger UI 3.x ; UI 2.x usó una técnica diferente.

// index.html const ui = SwaggerUIBundle({ url: "http://your.server.com/swagger.json", ... requestInterceptor: (req) => { req.headers.Authorization = "Bearer xxxxxxx" return req } })


Quizás esto pueda ayudar:

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''

Puede copiarlo y pegarlo aquí: http://editor.swagger.io/#/ para ver los resultados.

También hay varios ejemplos en la web del editor swagger con configuraciones de seguridad más complejas que podrían ayudarlo.


Por qué funciona la "Respuesta aceptada" ... pero no fue suficiente para mí

Esto funciona en la especificación. Al menos swagger-tools (versión 0.10.1) lo valida como válido.

Pero si está utilizando otras herramientas como swagger-codegen (versión 2.1.6) encontrará algunas dificultades, incluso si el cliente generado contiene la definición de autenticación, como esta:

this.authentications = { ''Bearer'': {type: ''apiKey'', ''in'': ''header'', name: ''Authorization''} };

No hay forma de pasar el token al encabezado antes de llamar al método (punto final). Mira en esta firma de función:

this.rootGet = function(callback) { ... }

Esto significa que solo paso la devolución de llamada (en otros casos, parámetros de consulta, etc.) sin un token, lo que conduce a una compilación incorrecta de la solicitud al servidor.

Mi alternativa

Desafortunadamente, no es "bonito", pero funciona hasta que obtenga el soporte de JWT Tokens en Swagger.

Nota: que se está discutiendo en

Por lo tanto, es manejar la autenticación como un encabezado estándar. En el objeto de path agregue un parámetro de encabezado:

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''

Esto generará un cliente con un nuevo parámetro en la firma del método:

this.rootGet = function(authorization, callback) { // ... var headerParams = { ''authorization'': authorization }; // ... }

Para usar este método de la manera correcta, simplemente pase la "cadena completa"

// ''token'' and ''cb'' comes from elsewhere var header = ''Bearer '' + token; sdk.rootGet(header, cb);

Y funciona.