如何通过 API 网关将 Cognito 用户池信息传递给 Lambda

How to pass Cognito User Pool information to Lambda through API Gateway

我在 API 网关上有一个 REST API,它使用 Cognito 用户池授权方,API 调用 Lambda 函数。在 Lambda 函数中,我希望能够使用 Cognito 用户池信息(例如 ID 令牌、用户 ID、电子邮件),但我似乎无法让它工作。

从谷歌搜索看来最好的方法是使用 body 映射模板重新格式化上下文数据:

#set($inputRoot = $input.path('$'))
{
  "user_id" : "$context.authorizer.claims.sub"
}

或在集成设置中进行设置 Use Lambda Proxy Integration = True,然后按照以下方式提取用户数据:

def lambda_handler(event, context):
    user_id = event.requestContext.authorizer.claims.sub

但是这两种方法都不起作用。第一个给出上下文中没有user_id的错误:

def lambda_handler(event, context):
    user_id = context["user_id"] # <- fails

第二个 returns(我假设是)事件 body 数据,没有 requestContext 属性。

我的集成类型设置为 Lambda。有什么我想念的吗?

所以对于处于类似情况的其他人,我最终只是删除了 API 并重新制作它,然后它适用于两种情况。我猜想与 AWS 的大多数事情一样,您最好删除并重新开始,而不是在已经完成设置后尝试更改设置。