目标
向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的新手任何人都没有遇到任何问题...但我找不到任何好的例子。
如果可以提供任何非常有用的指导,非常感谢
你的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)。
每个属性使用的名称必须对应于安全定义中声明的安全方案。
OAS 3:https://swagger.io/docs/specification/authentication/
Using Multiple Authentication Types
某些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