Как превратить объект аутентификации CognitoAuth в учетные данные AWS-SDK
У меня есть пользовательский пул cognito, и я могу успешно войти в свое приложение с помощью следующего кода:
const authData = {
ClientId : '2222222222222', // Your client id here
AppWebDomain : '1111111111.auth.us-east-1.amazoncognito.com',
TokenScopesArray : ['openid'],
RedirectUriSignIn : 'https://app.domain.com',
RedirectUriSignOut : 'https://app.domain.com'
};
const CognitoAuth = AmazonCognitoIdentity.CognitoAuth;
const auth = new CognitoAuth(authData);
auth.userhandler = {
/**onSuccess: <TODO: your onSuccess callback here>,
onFailure: <TODO: your onFailure callback here>*/
onSuccess: function(result: any) {
console.log("COGNITO SUCCESS!");
console.log(result);
},
onFailure: function(err: any) {
console.log("COGNITO FAIL!");
console.log(err);
}
};
auth.getSession();
const curUrl = window.location.href;
auth.parseCognitoWebResponse(curUrl);
Теперь у меня есть объект аутентификации, который я хотел бы преобразовать в какие-то учетные данные для имеющегося у меня aws-sdk, чтобы я мог перечислять элементы в корзину S3, предполагая правильную политику в моих прикрепленных ролях.
как то так, но поймите, что это не работает
AWS.config.credentials = auth.toCredentials(); //<== hoping for magic
const s3 = new AWS.S3();
s3.listObjectsV2(listObjectsV2Params, function(err: any, data: any) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data.Contents[0]); // successful response
});
Возможно ли это, и если да, то как мне это сделать?
UDPATE
Принятый ответ сработал и оказал большую помощь, добавив некоторые дополнения для ясности в отношении проблем, с которыми я столкнулся.
const creds = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:b111111-1111-1111-1111-1111111', // <-- This is in your Federated Identity if you have that set up, you have to "edit" the identity pool to get it, logging into cognito its a different screen.
Logins: {
"cognito-idp.us-east-1.amazonaws.com/us-east-1_BBBB1BBBBV2B": result.idToken.jwtToken // <- this login [POOL ID] is not the pool ARN, you need it in this format.
}
});
1 ответ
Это возможно, и следующие шаги.
- Чтобы разрешить доступ к ресурсам AWS для пользователей пулов пользователей AWS, также необходимо настроить пулы идентификации AWS, регистрирующие UserPool в качестве поставщика.
- Роль IAM, назначенная для аутентифицированного пользователя, должна иметь доступ к S3.
Используя AWS SDK для пулов идентификации, токен JWT UserPools можно заменить временным AccessKey и SecretKey для использования AWS SDK для S3.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: IDENTITY_POOL_ID, Logins: { [USER_POOL_TOKEN]: result.idToken.jwtToken } }); AWS.config.credentials.refresh((error) => { if (error) { console.error(error); } else { console.log('Successfully logged!'); } });
- Внутри обратного вызова AWS.config.credentials.refresh вы можете вызвать S3, поскольку метод внутренне будет обрабатывать получение временных учетных данных.