AWS Lambda,API网关& Cognito:如何在lambda函数中获取标识对象?

时间:2017-03-06 13:01:34

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

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

  • AWS api_gateway
  • AWS cognito
  • AWS lambda

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

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

问题:我无法检索identityaccessKeyaccountId等信息cognitoIdentityId。当我通过lambda函数中的null对象访问它们时,所有这些变量都是context

问题:要获取identity变量,我需要做什么?

2 个答案:

答案 0 :(得分:5)

Lambda函数中的上下文对象包含Lambda角度的上下文。 Lambda函数使用其执行角色的标识运行,因此其上下文将不包含Cognito用户池中的标识属性。

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

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

答案 1 :(得分:0)

创建Cognito用户池时,您将创建两个IAM角色。您现在可以设置API网关以通过

传递身份信息
  1. 授权设置为AWS_IAM
  2. 开启Invoke with caller credential
  3. 在Lambda中,您应该能够在上下文中获取信息。

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