2

我目前有一个 API Gateway 设置来绑定使用 Java 编写的 Lambda 函数。我正在使用 javascript SDK 调用 API Gateway 端点,它们正确地中继到 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。

4

2 回答 2

3

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

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

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

另请查看 API Gateway 的论坛讨论之一以了解更多详细信息/背景信息(如何通过 API Gateway 将 cognito 身份 ID 传递到后端)。

于 2016-06-09T21:25:51.397 回答
1

尝试使用event.requestContext.authorizer.claims. 您可以访问cognito:username,email和其他在生成令牌时塞进令牌的东西。您甚至可以使用 Cognito 的预令牌生成触发器对此进行自定义。

于 2019-01-23T04:42:39.613 回答