我有一个appsync lambda解析器,它将查询postgresql数据库。对于未经授权的用户,Appsync请求使用API密钥进行授权;对于授权用户,则使用认知用户池进行授权。当一个经过身份验证的用户发出请求时,我想在lambda解析器中检索身份识别数据,但我不知道如何做到这一点。首先,这里是我对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解析器中查看身份验证数据?谢谢。
发布于 2021-10-12 08:58:01
您可以通过解析器映射模板向您的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密钥的未授权用户的请求)。
https://stackoverflow.com/questions/69533608
复制相似问题