Gateway API 中的 Cognito 用户池授权方是否需要对所有请求进行签名?

Does Cognito User Pool Authorizer in Gateway API require all requests to be signed?

关于将 Cognito 用户池授权器与网关 API 结合使用的 documentation 只说我应该:

  1. Call API methods configured with a user pool authorizer, supplying the unexpired token in the Authorization header or another header of your choosing.

网络上的其他一些文本也反映了这一点。

但是,当我尝试使用令牌时,我收到一条错误消息,提示缺少 CredentialsSignatureSigned Headers 参数(以及 Date header).我使用的令牌很可能是正确的,因为它通过了授权方网络图形用户界面中的测试。

我的问题分为两部分:

Cognito 用户池授权方不需要对请求签名。您只需在每个请求的授权 header 中传递由 Cognito 生成的 OpenID Connect 身份令牌的 JWT 版本。

result.getIdToken().getJwtToken()

这应该可以回答您的两个问题。

我认为您对 Cognito Identity 服务感到困惑,该服务将来自 public 身份提供商(Facebook、Amazon、用户池等)的有效身份交换为临时 AWS 凭证。您可以使用来自 Cognito Identity 服务的 AWS 凭证来签署请求。

如果您仅使用用户池,则成功身份验证的结果是 OIDC 身份令牌和 JWT 访问令牌。 API 网关在配置了用户池授权方时,使用身份令牌对请求进行身份验证。