AWS API Gateway/Cognito Userpools/Lambdas无法传递呼叫者凭据

evd*_*vdh 10 amazon-web-services amazon-cognito aws-lambda aws-api-gateway

我正在使用Lambda后端开发AWS API Gateway实现.我使用API​​ Gateway与Cognito Userpools(相当新的)集成,而不是使用Lambda构建自定义授权程序(这是在集成之前的推荐方式).

我创建了一个概念验证(javascript),用Cognito对用户进行身份验证,然后使用这些凭据调用API Gateway.因此,基本上,对API网关的结束调用是使用我在Authorization标头中从Cognito(result.idToken.jwtToken)收到的JWT令牌.这一切都有效,我可以验证只有使用此令牌才能访问API.

一切正常,但现在我想在我的Lambda中访问Cognito身份; 例如身份ID或姓名或电子邮件.我已经阅读了如何映射所有参数,但实际上我只是在集成请求中使用标准的"Method Request Passthrough"模板.我记录了lambda中的所有参数,所有'cognito'参数都是空的.

我查看了许多类似的问题,并且他们都建议在集成请求中启用"使用调用者凭据调用"复选框.这很有道理.

但是,只有在使用AWS_IAM作为授权时才能启用此复选框,如果您选择了您的cognito UserPool ,则不能启用此复选框.所以它是不可能选择它并且实际上是禁用的.

在这种情况下有人知道该怎么做吗?这仍然在进行中,还是有理由不能启用此功能并在Lambda中获取认证凭据?

非常感谢.

Ka *_*ong 5

如果您需要在后端记录用户信息,您可以使用$context.authorizer.claims.sub$context.authorizer.claims.email获取Cognito 用户池的子目录电子邮件。

以下是有关在 API Gateway 中使用 Amazon Cognito 您的用户池的文档

  • 我尝试了这个,但我在后端得到空值: { "context": { "sub": "", "email": "" } } (2认同)
  • 嗯,我不知道 Java lambda 的等价物是什么?(“context”对象上没有“getAuthorizer” (2认同)