当前位置: 首页 > 知识库问答 >
问题:

带有自定义头名的Swagger/OpenAPI承载auth

全宪
2023-03-14
curl -H "X-Samanage-Authorization: Bearer <TokenGoesHere>" -H 'Accept: application/vnd.samanage.v2.1+json' -H 'Content-Type: application/json' -X GET https://api.samanage.com/incidents.json

我知道https://swagger.io/docs/specification/authentication/bearer-authentication/,但它似乎并没有完全帮助我。

This(OpenAPI 3)

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
...
security:
- bearerAuth: []

名为default的身份验证标头中的结果(Authorization)

curl -X GET "https://api.samanage.com/incidents/12341234.json" -H "accept: application/json" -H "Authorization: Bearer <TokenGoesHere>"
components:
  securitySchemes:
    bearerAuth:
      type: http
      name: X-Samanage-Authorization
      in: header
      scheme: bearer

但这在Swagger编辑器中验证失败,因为我认为HTTP类型不允许name组件(就像apikey类型一样)。老实说,我不能完全理解这里的医生。

我确实读过关于规范扩展的文章,但是我对OpenAPI是完全陌生的,我找不到任何关于如何实际实现我所需要的东西的例子。

任何洞察力都非常感谢!

共有1个答案

施自明
2023-03-14

类型:HTTP用于RFC7235和IANA HTTP authentication Scheme注册表定义的HTTP身份验证。根据定义,HTTP身份验证使用Authorization标头。

要使用自定义头名称,需要将其定义为API密钥(类型:apikey):

components:
  securitySchemes:
    bearerAuth:
      type: apiKey
      name: X-Samanage-Authorization
      in: header

请注意,由于它是非标准承载方案,客户端需要手动将“承载”前缀添加到令牌值中。例如,当您在Swagger UI中单击“授权”时,您将需要输入“承载令牌”,而不仅仅是“令牌”。

 类似资料:
  • 如何为这些参数编写OpenAPI(Swagger)定义?

  • 有没有人对Swagger Codegen有一些经验?目前,我正在努力执行Swagger Codegen CLI。在本教程之后,我首先尝试通过OpenAPI生成器生成Dart代码:https://clearpoint.digital/blog/accelerate-flutter-development-with-contract-first-openapi-and-dart-code-genera

  • 我试图用Spring Cloud Stream创建一个kafka使用者,以便监听在任何Spring上下文之外构建的kafka消息,并使用自定义头(operationType)。 我使用的是Spring Boot 1.5.x/Spring Cloud egdware.sr5和1.1.1版本的kafka-client和Kafka2.11。 我的侦听器类包含此方法 而operationType标头是存在

  • 我需要发送一个GET请求,标题是:。我期待服务器的XML响应。我用邮递员测试了请求和响应,一切都很好。但是,当我尝试在Spring中使用执行此操作时,我总是会收到400个错误请求。的异常是: 我的代码: 调试消息将标头显示为,这似乎是正确的。我想知道我的请求出了什么问题,以及是否有一种方法可以看到在线调试的请求。

  • 我正在将swagger应用于我的一个项目。 然后,他们应该在标头中随每次调用一起发送此令牌。 所以它就像: 看看swagger文档,它似乎只是为了处理OAuth而设置的。有没有办法让swagger以我的方式处理身份验证?我的意思是在生成的代码中。我可以为项目生成代码,它只有“Basic:...”作为选项。

  • 注意:我查看了这篇类似的旧文章,但当时不可用。