我想使用仅对 Cognito 用户组成员可用的 lambda 函数。在该函数中,我想访问刚刚调用该函数的特定用户的身份。到目前为止,我还没有让它工作。
我创建了一个Cognito组,并准备了一个带有JS的HTML页面,可以注册,确认和登录用户。除此之外,我可以提取身份令牌。
我还在 API 网关中创建了一个连接到 Lambda 函数的 API。将授权设置为Cognito组效果很好,并且只能使用有效的身份令牌调用该函数。
但是,我不知道如何以及是否可以以这种方式访问 Lambda 函数中的身份。"使用调用方凭据调用"标志只能使用授权AWS_IAM进行设置。反过来,这需要在 HTTP 请求中使用不同的授权,但我不知道我需要在那里做什么。还是我走向了一个完全错误的方向?
在其他线程(例如 https://forums.aws.amazon.com/thread.jspa?threadID=231032 和文档中,我发现了有关设置请求映射模板的备注,但我在 GUI 中找不到可以执行类似操作的位置。
我将不胜感激对此的任何帮助!如果有更多的信息可以提供帮助,请询问它,我会尽可能多地提供。
我终于通过映射模板获得了调用者的身份。
要通过 JSON 格式使用映射模板,您需要添加模板"application/json"。然后,您可以单击新条目并提供特定模板。就我而言,我使用了
{
"name": "$context.authorizer.claims.name",
"username": "$context.authorizer.claims['cognito:username']"
}
这会将属性名称和用户名添加到 lambda 调用中的事件对象,分别包含属性名称和 cognito 用户名的内容。
请求映射模板可以在 GUI 的方法 -> 集成响应 -> 映射模板下找到。
模板如下:
{"testHeader" : "$input.params().header.get('Authorization')"}
将令牌传递给"测试标头"下的 lambda。
可能还值得检查上下文变量 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference( 以查看它是否包含您需要的信息,尽管我不相信它会,除非您转向自定义授权方身份验证方法。