使用注释授权的请求必须满足所有方案

问题描述 投票:0回答:2

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
annotations swagger openapi
2个回答
2
投票

看起来没有办法使用 Swagger Java 注释来表达这一点。以下是 GitHub 上的相关问题/增强请求:

作为解决方法,您可以对生成的 OpenAPI 文件进行后处理(例如使用

yq
jq
等工具)并根据需要添加/修复
security
部分。


0
投票

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: []
© www.soinside.com 2019 - 2024. All rights reserved.