Amazon web services 通过API网关访问Lambda函数中的客户端上下文
我创建了一个Lambda函数,并将其连接到API网关端点。我的用户通过Cognito使用Facebook进行身份验证(因此,显然是使用联邦身份池)。在我的iOS应用程序中,我能够正确地进行身份验证,接收回Cognito Id,并通过API网关正确地执行Lambda函数 我现在陷入困境的地方是试图在我的lambda中访问用户的身份。我从其他线程和AWS文档中了解到,我应该使用它通过JS中的Amazon web services 通过API网关访问Lambda函数中的客户端上下文,amazon-web-services,aws-lambda,aws-api-gateway,amazon-cognito,Amazon Web Services,Aws Lambda,Aws Api Gateway,Amazon Cognito,我创建了一个Lambda函数,并将其连接到API网关端点。我的用户通过Cognito使用Facebook进行身份验证(因此,显然是使用联邦身份池)。在我的iOS应用程序中,我能够正确地进行身份验证,接收回Cognito Id,并通过API网关正确地执行Lambda函数 我现在陷入困境的地方是试图在我的lambda中访问用户的身份。我从其他线程和AWS文档中了解到,我应该使用它通过JS中的context.identity.cognitoIdentityId访问标识。但是,上下文总是空的 进一步挖掘
context.identity.cognitoIdentityId
访问标识。但是,上下文总是空的
进一步挖掘表明,上下文是在X-Amz-Client-context头中传递的——当我查看API网关调用的数据包时,我没有看到该头被传递。我正在使用网关为我的端点自动生成的SDK(ObjC)
我在这里遗漏了什么?很抱歉给您带来了困惑。将此值输入lambda函数有两个选项:
event.requestContext.identity.cognitoIdentityId
中可用lambda:Invoke
权限我为这一混乱道歉。将此值输入lambda函数有两个选项:
event.requestContext.identity.cognitoIdentityId
中可用lambda:Invoke
权限您在方法请求中使用的模板不是passthrough模板吗?我不知道。无论如何,头不是由客户机SDK生成的,所以我认为这是一个更大的问题。或者X-Amz-Client-Context是由API网关自动添加的吗?
X-Amz-Client-Context
头应该由移动SDK自动添加,然后由API网关处理。您在方法请求中使用的是传递模板以外的模板吗?我不知道。无论如何,头不是由客户机SDK生成的,所以我认为这是一个更大的问题。或者X-Amz-Client-Context是由API网关自动添加的?X-Amz-Client-Context
头应该由移动SDK自动添加,然后由API网关处理。谢谢。我终于做到了。我最终使用了选项1。Bob,有没有关于使用API网关+Lambda+Cognito设置的最佳实践文档?拼凑如何使其工作是一件很累人的事情。@Vickram我们正在寻找添加对Cognito的支持,作为其中的一部分,这将有助于将所有服务粘合在一起。您必须确保启用UseAmAuth
,选项1才能工作。谢谢。我终于做到了。我最终使用了选项1。Bob,有没有关于使用API网关+Lambda+Cognito设置的最佳实践文档?拼凑如何使其工作是一件很累人的事情。@Vickram我们正在寻找添加对Cognito的支持,作为其中的一部分,这将有助于将所有服务粘合在一起。您必须确保启用UseAmAuth
,选项1才能工作。