我目前有一个API网关设置来绑定使用Java编写的Lambda函数。我正在使用 JavaScript 开发工具包调用 API 网关终端节点,它们正确地中继到 Lambda 函数。但是,当我尝试通过以下方式访问认知身份 ID 时:
context.getIdentity()
我得到以下响应:
lambdainternal.api.LambdaCognitoIdentity@xxxxxx
如果我跑
context.getIdentity().getIdentityId()
它只是在记录器中返回一个空字符串。不确定我需要做什么才能获取发出请求以传递到上下文的用户的身份 ID。
我正在通过以下方式生成Javascript AWS Api Client:
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 网关的论坛讨论之一,以获取更多详细信息/背景信息(如何通过 API 网关将 cognito 身份 ID 传递到后端)。
尝试使用 event.requestContext.authorizer.claims
.您可以访问cognito:username
、email
和其他在生成令牌时塞满令牌的内容。您甚至可以使用 Cognito 的预令牌生成触发器对其进行自定义。