目标
在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的新手任何人都没有遇到任何问题...但我找不到任何好的例子。
如果可以给出任何非常有帮助的指导 非常感谢
答案 0 :(得分:6)
您的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: [] } ]
Swagger2规范在Operation Object下列出:
security
: [Security Requirement Object]对此操作应用安全方案的声明。值列表描述了可以使用的备用安全方案(即,安全要求之间存在逻辑OR)。此定义将覆盖任何声明的顶级安全性。要删除顶级安全声明,可以使用空数组。
Security Requirement Object的描述如下:
列出执行此操作所需的安全方案。该对象可以在其中声明多个安全方案,这些安全方案都是必需的(即,方案之间存在逻辑AND)。
每个属性使用的名称必须对应于安全定义中声明的安全方案。
答案 1 :(得分:0)
OAS 3:https://swagger.io/docs/specification/authentication/
使用多种身份验证类型 某些REST API支持多种身份验证类型。安全性部分使您可以使用逻辑OR和AND组合安全性要求,以实现所需的结果。安全使用以下逻辑:
security: # A OR B
- A
- B
security: # A AND B
- A
B
security: # (A AND B) OR (C AND D)
- A
B
- C
D