在AWS Lambda中访问用户身份

问题描述 投票:1回答:2

我想使用仅适用于Cognito用户组成员的lambda函数。在该函数中,我想访问刚调用该函数的特定用户的标识。到目前为止,我没有让这个工作。

我创建了一个Cognito组,并准备了一个带有JS的HTML页面,可以注册,确认和登录用户。除此之外,我可以提取身份令牌。

我还在API网关中创建了一个连接到Lambda函数的API。将授权设置为Cognito组非常有效,只能使用有效的标识令牌调用该函数。

但是,我不知道如何以这种方式访问​​Lambda函数中的身份。标志“Invoke with caller credentials”只能使用Authorization AWS_IAM进行设置。反过来,这需要在HTTP请求中使用不同的授权,但我不知道我需要在那里做什么。还是我走向一个完全错误的方向?

在其他线程中,例如https://forums.aws.amazon.com/thread.jspa?threadID=231032,以及我发现有关设置请求映射模板的文档的文档,但我在GUI中找不到可以执行此类操作的位置。

我很感激你的帮助!如果有任何更多信息可以提供帮助,只需要求它,我会尽可能多地提供。

amazon-web-services aws-lambda aws-api-gateway amazon-cognito amazon-iam
2个回答
1
投票

请求映射模板可以在方法 - >集成响应 - >映射模板下的GUI中找到。

一个模板,如:

{"testHeader" : "$input.params().header.get('Authorization')"}

将令牌传递给'testheader'下的lambda。

也可能值得查看上下文变量(https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference)以查看它是否包含您需要的信息,尽管我不相信它,除非您转到自定义授权方法的身份验证。


1
投票

我终于通过Mapping Templates获得了调用者的身份。

要通过JSON格式使用映射模板,您需要添加模板“application / json”。然后,您可以单击新条目并提供特定模板。就我而言,我用过

{
    "name": "$context.authorizer.claims.name",
    "username": "$context.authorizer.claims['cognito:username']"
}

这会将属性名称和用户名添加到lambda调用中的事件对象,其中包含属性名称和cognito用户名的内容。

© www.soinside.com 2019 - 2024. All rights reserved.