-1

使用 Cognito User Pool Authorizer 和 Gateway API的文档只说我应该:

  1. 调用使用用户池授权方配置的 API 方法,在 Authorization 标头或您选择的其他标头中提供未过期的令牌。

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

但是,当我尝试使用令牌时,我收到一条错误消息,提示缺少Credentials, Signature, Signed Headersparams (和Date标头)。我使用的令牌很可能是正确的,因为通过了授权人的 web gui 中的测试。

我的问题有两个部分:

  • 这是否意味着使用 Cognito 用户池授权器需要我签署每个请求?有没有办法将它配置为只接受一个有效的令牌?

  • 如果我想保持对 Amazon Gateway 的 HTTP 调用简单并仅使用令牌对其进行授权(以便可以轻松地从 Python 后端等手动执行),我是否被迫使用 Lambda 编写自定义授权方?还是有更好的选择?

4

1 回答 1

1

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

result.getIdToken().getJwtToken()

这应该回答你的两个问题。

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

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

于 2017-04-07T21:16:28.003 回答