【问题标题】:Accessing client context in a Lambda function via API Gateway通过 API Gateway 在 Lambda 函数中访问客户端上下文
【发布时间】:2017-06-13 08:52:58
【问题描述】:

我创建了一个 Lambda 函数,并将其连接到 API Gateway 端点。我的用户正在通过 Cognito 使用 Facebook 进行身份验证(因此,显然使用了联合身份池)。在我的 iOS 应用程序中,我能够正确地进行身份验证,接收回 Cognito Id,并且还可以通过 API Gateway 正确地执行我的 Lambda 函数。

我现在卡住的地方是尝试在我的 lambda 中访问用户的身份。我从其他线程和 AWS 文档中了解到,我应该能够通过 JS 中的 context.identity.cognitoIdentityId 访问身份。但是,上下文始终为空。

进一步挖掘表明上下文是在 X-Amz-Client-Context 标头中传递的——当我查看 API 网关调用的数据包时,我没有看到该标头正在传递。我将网关自动生成的 SDK (ObjC) 用于我的端点。

我在这里错过了什么?

【问题讨论】:

  • 您在方法请求中使用的不是直通模板吗?
  • 我不知道。无论如何,客户端SDK都不会生成标头,所以我认为这更多是一个问题。还是API Gateway自动添加的X-Amz-Client-Context?
  • X-Amz-Client-Context header 应该是由移动端 SDK 自动添加,然后由 API Gateway 处理的。

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


【解决方案1】:

对于造成的混乱,我深表歉意。您有 2 个选项可以将此值导入 lambda 函数:

  1. 通过 API 网关传递。如果您使用的是 Lambda 代理,它应该已经在 event.requestContext.identity.cognitoIdentityId 中可用。

  2. 通过在您的集成中启用使用调用方凭据。如果您使用此方法,您还需要为您的 Cognito 角色添加 lambda:Invoke 权限。

【讨论】:

  • 谢谢。我终于让它工作了。我最终使用了选项 1。Bob,是否有使用 API Gateway + Lambda + Cognito 设置的最佳实践文档?拼凑如何让它发挥作用令人筋疲力尽。
  • @Vickram 我们希望在AWS SAM 中添加对 Cognito 的支持,这将有助于将所有服务粘合在一起。
  • 您必须确保启用 useIAMAuth 才能使选项 1 起作用。
猜你喜欢
  • 1970-01-01
  • 2017-04-24
  • 2017-12-16
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2016-07-13
  • 1970-01-01
相关资源
最近更新 更多