GCP Endpoint 使用多重身份验证

GCP Endpoint's using multiple authentication

我在 swagger 文件中为方法定义了以下安全方案:

...
    get:
      ...
      security:
      - api_key: []
      - firebase: []
securityDefinitions:
  api_key:
    in: query
    name: key
    type: apiKey
  firebase:
    authorizationUrl: ''
    flow: implicit
    type: oauth2
    x-google-audiences: project-id
    x-google-issuer: https://securetoken.google.com/project-id
    x-google-jwks_uri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com

但是,如果我尝试使用 api 密钥发送请求,它将不起作用,但如果我使用 firebase 令牌(即使我不提供 api 密钥,它会起作用).

回复:

{
    "code": 16,
    "message": "JWT validation failed: Missing or invalid credentials",
    "details": [
        {
            "@type": "type.googleapis.com/google.rpc.DebugInfo",
            "stackEntries": [],
            "detail": "auth"
        }
    ]
}

如果我从安全定义中删除 firebase,那么它将使用 api 键工作。

如果还有用于相同方法的 oauth2,api 密钥安全方案将不起作用,这是一个已知问题吗?

当备选方案之一是 API 密钥时,"OR" 安全要求 are not supported 会发生什么。因此,您的行为是正确的。

如果您同时提供这两种选择,API 密钥将被忽略,但如果 OAuth2 被删除并且它只接受 API 密钥,它会起作用。

根据我附加的 documentation,您可能需要使用 "AND" 条件的两种身份验证方法。像这样:

...
security:
- api_key: []
  firebase: []
....