使用以下AWS技术构建无服务器后端:
在api_gateway中,我创建了一个Cognito用户池授权程序,我使用此授权程序来处理对后端的所有请求。
一切正常:当用户使用无效的JWT令牌发出请求时,服务器会相应地进行响应。有效的JWT令牌执行请求的Lambda函数。
问题:我无法检索identity
,accessKey
,accountId
等信息cognitoIdentityId
。当我通过lambda函数中的null
对象访问它们时,所有这些变量都是context
问题:要获取identity
变量,我需要做什么?
答案 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网关以通过
传递身份信息AWS_IAM
Invoke with caller credential
在Lambda中,您应该能够在上下文中获取信息。
注意:在Cognito IAM角色中,您需要允许API网关的调用权限。