Ранее, когда мы начинали наш проект только с Cognito User Pool, я создал множество распознавателей с проверкой по данным Cognito User Pool, например:
#if( $ctx.identity.claims["custom:role"] == "admin" )
...some code...(get data, invoke lambda, e.t.c.)
#else
$utils.unauthorized()
#end
Но позже нам понадобились другие поставщики авторизации (Facebook,Гугл и тд).Поэтому мы перешли на cognitoIdentityId, но возникла проблема с получением пользовательских данных из пула пользователей Cognito в решателях AppSync.В AWS Lambda я нашел идентификатор пула пользователей Cognito от cognitoIdentityAuthProvider и могу получить атрибуты пользователя 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;
}
Вопрос в том, как получитьданных из пула пользователей Cognito с использованием cognitoIdentityId в распознавателях AppSync? Или есть другие варианты? Надеюсь, мне не нужно создавать отдельную лямбду для каждого резольвера?