Gateway API中的Cognito User Pool Authorizer是否要求签署所有请求?

时间:2017-04-07 13:11:29

标签: amazon-web-services aws-api-gateway aws-cognito

使用带有Gateway API的Cognito用户池授权程序的documentation只表示我应该:

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

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

但是,当我尝试使用令牌时,收到一条错误消息,通知有关CredentialsSignatureSigned Headers参数(以及Date标题)的丢失。我正在使用的令牌很可能是正确的,因为它通过了授权人网站gui中的测试。

我的问题分为两部分:

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

  • 如果我想简单地保持对Amazon Gateway的HTTP调用 仅使用令牌授权他们(以便他们可以很容易地 手工执行,从Python后端等),我被迫写了一个 使用Lambda的自定义授权者?或者有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

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

if (myList != null) {
     for (String item : myList) {
         if (item != null) {
              ...;
              ...;
         }
     }
}

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

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

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