【问题标题】:Swagger - Adding multiple security parameters to the same schema definitionSwagger - 将多个安全参数添加到同一架构定义
【发布时间】:2015-06-19 15:27:16
【问题描述】:

瞄准

在 API 中发出的每个请求都包含多个安全标头

问题

我正在尝试将多个标头添加到我的 Swagger YAML 安全定义中。 我已经搜索了 API,但运气不佳 但是我发现在进行“尝试此操作”时,我需要选择一个。而不是能够同时使用两者。这是正确的还是我做错了什么?

片段

securityDefinitions:
  userEmail:
    type: apiKey
    name: User Email
    in: header
  clientId:
    type: apiKey
    name: Client Id
    in: header

security: [ { userEmail: [], clientId: []  } ]

替代方案?

如果我试图做到这一点是不可能的...... 是否可以将这些参数指定为 swagger 文档中所有其余路径的默认值?

本周我是 Swagger 的新手,任何人都发现其他一切都没有问题......但我找不到任何好的例子。

如果可以提供任何指导,那将非常有帮助 非常感谢

【问题讨论】:

  • 旁注:我在 Swagger IRC 上与开发人员聊天,他们认为这种格式是正确的。他们建议可能不是语法,而是 Swagger 编辑器不正确。我会试试这个并发布我的发现。

标签: swagger


【解决方案1】:

您的 SecurityDefintions 对象看起来没问题。请注意

security: [ { userEmail: [], clientId: []  } ]

表示 API 客户端必须同时使用userEmail 身份验证和clientId 身份验证!您可能的意思是:

security: [ { userEmail: [] }, { clientId: []  } ]

这意味着 API 客户端必须使用userEmail 身份验证或clientId 身份验证。

为避免一遍又一遍地重复此定义,您可以使用全局 security 属性,该属性适用于没有自己的 security 对象的所有路径:

security: [ { userEmail: [] }, { clientId: []  } ]
paths:
  "/foo":
    get:
    post:

或为明确性或多个常见值使用引用:

paths:
  "/foo":
    get:
      security:
        "$ref": "#/definitions/lowSecurity"
    post:
      security:
        "$ref": "#/definitions/highSecurity"
definitions:
  lowSecurity:  [ { foo: [] }, { bar: []  } ]
  highSecurity: [ { foo: [] } ]

参考

Operation Object 下的 Swagger2 规范声明:

security: [Security Requirement Object]

声明哪些安全方案适用于此操作。值列表描述了可以使用的替代安全方案(即,安全要求之间存在逻辑 OR)。此定义覆盖任何声明的顶级安全性。要删除顶级安全声明,可以使用空数组。

Security Requirement Object 是这样描述的:

列出执行此操作所需的安全方案。该对象可以在其中声明多个安全方案,这些方案都是必需的(即方案之间存在逻辑与)。

用于每个属性的名称必须对应于安全定义中声明的安全方案。

【讨论】:

  • 谢谢你。我找不到任何有关此的官方文档。请您指出您的信息来源好吗?
  • 我记不太清了,但我知道这并不容易理解,因为隐含的 AND-/OR-逻辑和 OpenAPI 对 OAuth2 实体的不同命名。官方文档见Security Definitions ObjectsSecurity Requirement Object
【解决方案2】:

OAS 3:https://swagger.io/docs/specification/authentication/

使用多种身份验证类型

一些 REST API 支持多种身份验证类型。 security 部分允许您使用逻辑 OR 和 AND 组合安全要求以实现所需的结果。 security 使用以下逻辑:

security:    # A OR B
  - A
  - B

security:    # A AND B
  - A
    B

security:    # (A AND B) OR (C AND D)
  - A
    B
  - C
    D

【讨论】:

  • @Jon Whitefield 请选择这个答案,它准确并回答了问题。
  • 答案已接受,我的问题早已不复存在,但阅读我的问题和对文档的简短扫描表明这将解决我的问题(尽管未经测试)。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2018-06-11
  • 2013-01-21
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多