amazon-web-services - 如何在 Appsync Lambda Resolver 中检索 cognito 识别数据(使用 cdk)
问题描述
我有一个 appsync lambda 解析器,它将查询 postgresql 数据库。Appsync 请求使用 API 密钥授权给未经授权的用户,并使用 cognito 用户池授权给授权用户。当经过身份验证的用户发出请求时,我想从我的 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 解析器中查看身份验证数据?谢谢你。
解决方案
您可以通过解析器映射模板向您的 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 密钥的请求)。
推荐阅读
- bash - 更改 bash 命令的执行顺序
- python - 获取 pytest 夹具值作为方法外部的类变量
- java - protoc 没有完全退出并且缺少: ---------- 1) com.google.protobuf:protoc:exe:${os.detected.classifier}:3.6.1
- reactjs - React Native 和 Redux:Require 循环(如何摆脱它?)
- spring-boot - Feign - 使用单一配置,但指定应注入的 bean
- ajax - 如何以类似于普通形式 POST 请求的方式在 Axios/Vue 中发送 Ajax 请求?
- elixir - 调试 Elixir 流
- javascript - 如何通过删除限制为 5 的旧元素来在数组中添加最近的元素?
- oracle - LIKE % 在 createQuery("") 中无法识别,但在 @Query("") 中工作
- python - ROS如何使用从一个回调函数到另一个回调函数的值