无法从 Java Lambda 函数获取 CognitoIdentityId

Unable to get CognitoIdentityId from Java Lambda Function

我目前有一个 API 网关设置来绑定使用 Java 编写的 Lambda 函数。我正在使用 javascript SDK 调用 API 网关端点,它们正确地中继到 Lambda 函数。但是,当我尝试通过以下方式访问 Cognito 身份 ID 时:

context.getIdentity()

我收到以下回复:

lambdainternal.api.LambdaCognitoIdentity@xxxxxx

如果我运行

context.getIdentity().getIdentityId()

它只是 returns 记录器中的一个空字符串。不确定我需要做什么来获取发出请求以传递到上下文的用户的身份 ID。

我正在通过以下方式生成 Javascript AWS Api 客户端:

var apiClient = apigClientFactory.newClient({
                    accessKey: credentials.accessKeyId,
                    secretKey: credentials.secretAccessKey,
                    sessionToken: credentials.sessionToken,
                    region: 'us-east-1'
                });

lambda 函数使用 IAM 策略进行保护,并且用户能够访问 lambda 函数,因此身份验证工作正常。它只是出于某种原因没有提供 IdentityId。

为了让 Lambda 在其自己的上下文变量中访问 Cognito 身份,您需要在集成响应选项卡上启用复选框“使用调用者凭据调用”。

或者,您也可以使用 API 网关的映射模板并将 $context.identity.cognitoIdentityId 的值传递给您的 Lambda 函数。映射模板看起来像这样:

{
  "cognito-identity" : "$context.identity.cognitoIdentityId"
}

另请查看 API Gateway 的论坛讨论之一以获取更多详细信息/背景信息 (How to pass cognito identity id to backend through API Gateway)。

尝试使用 event.requestContext.authorizer.claims。您可以访问 cognito:usernameemail 和生成令牌时塞进令牌中的其他内容。您甚至可以使用 Cognito 的预令牌生成触发器对其进行自定义。