【问题标题】:AWS Lambda, API gateway & Cognito: How to get the identity object in lambda function?AWS Lambda、API 网关和 Cognito:如何在 lambda 函数中获取身份对象?
【发布时间】:2017-07-26 08:44:36
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • stackoverflow.com/questions/29928401/… 这对您有帮助吗?
  • 我确实看过问题和答案,但似乎没有什么对我有用。
  • 我想知道您是否缺少此处所述的主体映射。 aws.amazon.com/blogs/mobile/…
  • 您链接的示例使用自定义授权方。我想知道是否可以使用 Cognito 用户池授权器获取登录用户的上下文。我想这是一个很常见的用例,所以我很困惑为什么它必须如此复杂!非常感谢,非常感谢任何帮助!

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


【解决方案1】:

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

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

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

【讨论】:

  • 这仍然是正确的答案吗?因为它对我不起作用。对于任何索赔,我都会得到空值。在过去的几天里,我发现了更多像我这样的 cmets。
【解决方案2】:

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

传递身份信息
  1. 授权设置为AWS_IAM
  2. 开启Invoke with caller credential

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

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

【讨论】:

  • 在我的上下文中仍然没有授权人 :(
猜你喜欢
  • 2015-07-07
  • 2022-01-27
  • 2020-02-16
  • 2016-10-17
  • 2018-09-13
  • 2018-12-11
  • 2019-09-01
  • 1970-01-01
相关资源
最近更新 更多