如何在Swagger Spec(swagger.json)中表示“Authorization:Bearer <token>”

我想传达的authentication/安全scheme需要设置一个标题如下:

Authorization: Bearer <token> 

这是我基于swagger文档的基础 :

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

提前致谢!

也许这可以帮助:

 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' 

你可以在这里复制和粘贴: http : //editor.swagger.io/#/来检查结果。

在swagger编辑器网页中也有几个例子,它们有更复杂的安全configuration可以帮助你。

为什么“可接受的答案”有效……但这对我来说还不够

这在规范中起作用。 至lessswagger-tools (版本0.10.1)validation它是有效的。

但是,如果您使用其他工具(如swagger-codegen (版本2.1.6)),则会发现一些困难,即使生成的客户端包含身份validation定义,如下所示:

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

在调用方法(端点)之前,无法将标记传递到标头。 看看这个函数签名:

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

这意味着,我只传递callback(在其他情况下查询参数等)没有令牌,这导致请求到服务器的不正确的生成。

我的select

不幸的是,这不是“漂亮”,但它的工作,直到我在Swagger上获得JWT令牌支持。

注:正在讨论中

  • 安全性:增加对承载authenticationscheme#583的授权头的支持
  • 安全性定义的可扩展性? #460

所以,它是像标准头一样处理authentication。 在path对象上追加一个标题参数表:

 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' 

这将在方法签名上生成一个带有新参数的客户端:

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

要正确使用此方法,只需传递“完整string”

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

和工作。

OpenAPI 3.0现在支持原生的承载/ JWTauthentication。 它是这样定义的:

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

Swagger UI 3.4.0+和Swagger Editor 3.1.12+(仅限于OpenAPI 3.0规范!)支持此function。