我正在为 Swagger/OpenAPI 实现代码生成器。但是,我在实现安全要求时遇到了问题。这些要求被定义为对象列表。列表成员是替代(或),对象成员是与。例如:
[ { a:[], b:{} }, { c:{}, d:{} } ]
这应该导致 (a && b) || (c && d)
但是,在实现这一点时,我遇到了实际安全要求有副作用的问题:
- OAuth2 - 如果失败必须重定向
- Basic – 必须发送 HTTP 401 Unauthorized 状态和 WWW-Authenticate 标头
- ApiKey——随便
但是,既然有一个or
你不能让第一次失败来设置这些副作用。似乎您需要先尝试所有组合,然后返回第一个并允许它设置标题/结果代码?
查看http://editor.swagger.io/上的生成器,我发现大多数生成器似乎都忽略了安全性,而 Java 生成器似乎and
在组合列表中。在我的示例中,我看到a && b && c && d
.
所以我的问题是:
- 是否有正确实现 OpenAPI 安全性的生成器?
- 如何处理这些副作用?