Iur*_*kyi 1 amazon-web-services amazon-cognito aws-appsync
之前,当我们仅使用Cognito用户池启动项目时,我创建了很多解析器,并通过Cognito用户池数据进行了验证,例如:
#if( $ctx.identity.claims["custom:role"] == "admin" )
...some code...(get data, invoke lambda, e.t.c.)
#else
$utils.unauthorized()
#end
Run Code Online (Sandbox Code Playgroud)
但是后来我们需要其他授权提供者(Facebook,Google等)。因此,我们迁移到了cognitoIdentityId,但是在AppSync解析器中从Cognito用户池中获取用户数据时出现了问题。在AWS Lambda中,我通过cognitoIdentityAuthProvider 找到了 Cognito用户池ID,并且可以获取Cognito用户属性,如UserAttributes下面的代码所示:
...
...
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;
}
Run Code Online (Sandbox Code Playgroud)
问题是如何使用AppSync解析器中的cognitoIdentityId从Cognito用户池中获取数据?还是还有其他选择?希望我不必为每个解析器创建单独的lambda吗?
我假设您正在使用AWS_IAM作为GraphQL API上的授权类型,并且您正在通过Cognito联合身份联合Cognito用户池用户以获得用于调用GraphQL API的临时AWS凭证。
目前,联合用户信息在$ context.identity对象中不可用。解决此问题的方法是您发布以使用lambda检索它,然后通过使用管道解析器在解析器中进一步使用它。
我是AppSync小组的成员,我们过去曾听过此功能要求,因此我将代表您为它+1。
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |