3

我使用以下 AWS 技术构建无服务器后端:

  • AWS api_gateway
  • AWS 认知
  • AWS 拉姆达

在 api_gateway 中,我创建了一个 Cognito 用户池授权器,并且我使用此授权器处理对后端的所有请求。

一切正常:当用户使用无效的 JWT 令牌发出请求时,服务器会做出相应的响应。有效的 JWT 令牌执行请求的 Lambda 函数。

问题:我无法检索identity信息,例如accessKeyaccountIdcognitoIdentityId。所有这些变量都是null当我通过contextlambda 函数中的对象访问它们时

问题:我需要做什么才能获得identity变量?

4

2 回答 2

5

Lambda 函数中的上下文对象包含从 Lambda 的角度来看的上下文。Lambda 函数以其执行角色的身份运行,因此其上下文不会包含来自 Cognito 用户池的身份属性。

API Gateway 通过 API Gateway 中的 $context.authorizer.claims 变量公开 Cognito 用户池身份信息。要从您的 Lambda 函数中访问此信息,您必须在 API Gateway 中修改您的正文映射模板,以通过请求正文将所需数据从 $context.authorizer.claims 传递到您的 Lambda 函数。您是 Lambda 函数,然后像任何其他字段一样从请求正文中读取此信息。

可以在此处找到有关这方面的文档。向下滚动到标题为“在方法上启用用户池授权者”的部分并查看步骤 7:“如果需要,选择集成请求以添加 $context.authorizer.claims ...”

于 2017-03-07T02:56:15.773 回答
0

当您创建 Cognito 用户池时,您将创建两个 IAM 角色。您现在可以设置 API Gateway 以通过以下方式传递身份信息

  1. 授权设置为AWS_IAM
  2. 打开Invoke with caller credential

在 Lambda 中,您应该能够在上下文中获取信息。

注意:在 Cognito IAM 角色中,您需要允许 API 网关的调用权限。

于 2017-08-16T05:31:50.767 回答