Javascript 无法从Java Lambda函数获取CognitoIdentityId

Javascript 无法从Java Lambda函数获取CognitoIdentityId,javascript,aws-lambda,aws-api-gateway,aws-java-sdk,Javascript,Aws Lambda,Aws Api Gateway,Aws Java Sdk,我目前有一个API网关设置来连接使用Java编写的Lambda函数。我使用javascript SDK调用API网关端点,它们正确地中继到Lambda函数。但是,当我尝试通过以下方式访问Cognito标识ID时: context.getIdentity() 我得到以下回应: lambdainternal.api.LambdaCognitoIdentity@xxxxxx 如果我跑 context.getIdentity().getIdentityId() 它只是在记录器中返回一个空字符串。我不

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

context.getIdentity()

我得到以下回应:

lambdainternal.api.LambdaCognitoIdentity@xxxxxx
如果我跑

context.getIdentity().getIdentityId()
它只是在记录器中返回一个空字符串。我不确定我需要做什么来获取用户的身份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标识,您需要启用Integration Response选项卡上的复选框“调用调用方凭据”

或者,您也可以使用API网关的映射模板,并将$context.identity.cognitoIdentityId的值传递给Lambda函数。映射模板的外观如下所示:

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

另外,请查看API网关论坛上的一个讨论,了解更多详细信息/背景信息()。

尝试使用
event.requestContext.authorizer.claims
。您可以访问
cognito:username
email
以及生成令牌时塞进令牌的其他内容。您甚至可以使用Cognito的pre-token generation触发器来定制它。

这是正确的。我认为问题在于我使用的是API网关的映射模板,而根本没有传递它。因为我根本没有传递它,所以启用“调用调用方凭据调用”并不重要。我解决了这个问题,忘了发布我的解决方案。感谢您的提醒,这绝对是正确的解决方案。