如何在 Appsync Lambda Resolver 中检索认知识别数据(使用 cdk)

问题描述 投票:0回答:2

我有一个 appsync lambda 解析器,它将查询 postgresql 数据库。 Appsync 请求使用 API 密钥对未经授权的用户进行授权,并使用认知用户池对授权用户进行授权。当经过身份验证的用户发出请求时,我想从 lambda 解析器中的 cognito 检索标识数据,但我不知道如何执行此操作。首先,这是我对 appsync 和 lambda 解析器的设置:

    this.api = new appsync.GraphqlApi(this, "API-NAME", {
      name: "API-NAME",
      schema: appsync.Schema.fromAsset("graphql/schema.graphql"),
      authorizationConfig: {
        defaultAuthorization: {
          authorizationType: appsync.AuthorizationType.API_KEY,
          apiKeyConfig: {
            expires: cdk.Expiration.after(cdk.Duration.days(365)),
          },
        },
        additionalAuthorizationModes: [
          {
            authorizationType: appsync.AuthorizationType.USER_POOL,
            userPoolConfig: {
              userPool: props.userPool,
            },
          },
        ],
      },
    });

const lambdaDs = this.api.addLambdaDataSource(
      "lambdaDatasource",
      props.LambdaConnectingGraphqlToDatabase
    );


lambdaDs.createResolver({
      typeName: "Query",
      fieldName: "listUsers",
    });

// etc. etc.

在我的 lambda 解析器中,即使经过身份验证的用户发出请求, context.identity 也是未定义的。我尝试在 lambdaDs.createResolver() 中使用请求映射模板,但我不知道如何进行这项工作,或者这是否是正确的方法。

如何在 lambda 解析器中查看身份验证数据?谢谢你。

amazon-web-services aws-lambda amazon-cognito aws-cdk aws-appsync
2个回答
1
投票

您可以通过解析器映射模板向 lambda 提供身份信息,请参阅 https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html

context.identity
部分是相关部分。

有一个部分包含可用于

AMAZON_COGNITO_USER_POOLS
授权的字段。

但是,请注意,对于

API_KEY
,未填充
context.identity
信息。

但是,您可以区分这两种场景,因为您将在 lambda 中拥有 Cognito 场景的身份信息,并且不会有 API 密钥场景的任何身份信息(因此您可以假设它是来自未经授权的用户使用 API 密钥的请求)。


0
投票

这就是我配置请求映射模板的方式,以便在 lambda 解析器中访问

identity

{
  "version": "2017-02-28",
  "operation": "Invoke",
  "payload": {
        "args": $utils.toJson($context.args),
        "identity":  $utils.toJson($context.identity)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.