OpenAPI 规范状态:
当在 OpenAPI 对象或操作对象上定义了安全要求对象列表时,只需满足列表中的安全要求对象之一即可授权请求。
提供的示例是:
security: # A AND B
- A
B
如何使用 Swagger Java 注释来做到这一点?
我试过了
@SecurityRequirement(name = "A")
@SecurityRequirement(name = "B")
还有
@SecurityRequirements(value = [SecurityRequirement(name = "A"),
SecurityRequirement(name = "B")] )
但是它们都产生:
security: # A OR B
- A
- B
看起来没有办法使用 Swagger Java 注释来表达这一点。以下是 GitHub 上的相关问题/增强请求:
作为解决方法,您可以对生成的 OpenAPI 文件进行后处理(例如使用
yq
或 jq
等工具)并根据需要添加/修复 security
部分。
MicroProfile API 支持这一点,如下所示。您定义安全方案和要求集:
@SecurityScheme(
securitySchemeName = "accessKey",
type = SecuritySchemeType.APIKEY,
apiKeyName = "X-Access-Key",
in = SecuritySchemeIn.HEADER
)
@SecurityScheme(
securitySchemeName = "secretKey",
type = SecuritySchemeType.APIKEY,
apiKeyName = "X-Secret-Key",
in = SecuritySchemeIn.HEADER
)
@SecurityRequirementsSet(
value = {@SecurityRequirement(name="accessKey"), @SecurityRequirement(name="secretKey")}
)
它会生成正确的 openapi:
security:
- accessKey: []
secretKey: []