gpt4 book ai didi

amazon-web-services - 如何仅使用 `ctx.identity.cognitoIdentityId` 在 AppSync Resolver 中获取相关的 Cognito 用户池用户数据?

转载 作者:行者123 更新时间:2023-12-02 20:05:49 24 4
gpt4 key购买 nike

早些时候,当我们仅使用 Cognito 用户池启动项目时,我创建了许多解析器并通过 Cognito 用户池数据进行验证,例如:

#if( $ctx.identity.claims["custom:role"] == "admin" )
...some code...(get data, invoke lambda, e.t.c.)
#else
$utils.unauthorized()
#end

但后来我们需要其他授权提供商(Facebook、Google 等)。因此,我们迁移到 cognitoIdentityId,但在 AppSync 解析器中从 Cognito 用户池获取用户数据时出现问题。在 AWS Lambda I found Cognito 用户池 ID 由 cognitoIdentityAuthProvider 提供,并且可以通过 UserAttributes 获取 Cognito 用户属性,请参阅下面的代码:

...
...
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({
apiVersion: '2016-04-18',
});

const getCognitoUserPoolId = (authProvider) => {
const parts = authProvider.split(':');
return parts[parts.length - 1].slice(0, -1);
};

// cognitoIdentityAuthProvider, which we pass as an parameter($ctx.identity.cognitoIdentityAuthProvider) from the AppSync resolver
const SUB = getCognitoUserPoolId(cognitoIdentityAuthProvider);

const params = {
UserPoolId: COGNITO_USER_POOL_ID,
Username: SUB,
};

try {
const { UserAttributes } = await cognitoidentityserviceprovider.adminGetUser(params).promise();
...
...
} catch (error) {
return error;
}

问题是如何在 AppSync 解析器中使用 cognitoIdentityId 从 Cognito 用户池获取数据?或者还有其他选项吗? 希望我不必为每个解析器创建单独的 lambda?

最佳答案

我假设您使用 AWS_IAM 作为 GraphQL API 上的授权类型,并且您通过 Cognito 联合身份联合 Cognito 用户池用户,以获取用于调用 GraphQL API 的临时 AWS 凭证。

目前,联合用户信息在 $context.identity 对象中不可用。您发布的解决方法是使用 lambda 检索它,并通过使用管道解析器在解析器中进一步使用它。

我是 AppSync 团队的成员,我们过去曾听说过此功能请求,因此我会代表您为您 +1。

关于amazon-web-services - 如何仅使用 `ctx.identity.cognitoIdentityId` 在 AppSync Resolver 中获取相关的 Cognito 用户池用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com