无法从 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:username
、email
和生成令牌时塞进令牌中的其他内容。您甚至可以使用 Cognito 的预令牌生成触发器对其进行自定义。
我目前有一个 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:username
、email
和生成令牌时塞进令牌中的其他内容。您甚至可以使用 Cognito 的预令牌生成触发器对其进行自定义。