我想使用仅适用于Cognito用户组成员的lambda函数。在该函数中,我想访问刚刚调用该函数的特定用户的身份。到目前为止,我还没有做到这一点。
我创建了一个Cognito组,并准备了一个带有JS的HTML页面,该页面可以注册,确认和登录用户。除其他外,我可以提取身份令牌。
我还在与Lambda函数连接的API网关中创建了一个API。将“授权”设置为Cognito组非常有效,并且只能使用有效的身份令牌来调用该功能。
但是,我不知道如何以及是否可以通过这种方式在Lambda函数中访问身份。只能使用授权AWS_IAM设置标志“使用呼叫者凭证进行调用”。反过来,这需要在HTTP请求中使用不同的Authorization,但是我不知道该怎么做。还是我朝着完全错误的方向前进?
在其他线程中,例如https://forums.aws.amazon.com/thread.jspa?threadID=231032和文档,我发现有关设置请求映射模板的评论,但是在GUI中找不到可以执行类似操作的位置。
对此,我将不胜感激!如果有更多有用的信息,请提出要求,我会尽力提供。
答案 0 :(得分: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)来查看它是否包含您所需要的信息,尽管我不相信它会保存,除非您转为使用Custom Authorizer身份验证方法。
答案 1 :(得分:1)
我终于通过映射模板获得了呼叫者的身份。
要通过JSON格式使用映射模板,您需要添加模板“ application / json”。然后,您可以单击新条目并提供特定的模板。就我而言,我使用
{
"name": "$context.authorizer.claims.name",
"username": "$context.authorizer.claims['cognito:username']"
}
这会将属性名称和用户名添加到lambda调用中的事件对象,其中分别包含属性名称和cognito用户名的内容。