В моем приложении Angular / NodeJS я сейчас использую AWS Cognito для управления своими пользователями. Он позволяет пользователям регистрироваться со своим адресом электронной почты и входить в систему с помощью своего адреса электронной почты и пароля.
Я хотел бы разрешить пользователям регистрироваться и входить в систему с помощью третьих лиц, таких как Facebook и Google. То есть, войдя в свою учетную запись Facebook, для них будет создана учетная запись пользователя в Cognito, аналогичная учетным записям для любых других пользователей.
На AWS нет четкой документации, как это сделать. Ближайшее, что я смог найти, - это здесь (код ниже), но это касается только временной аутентификации и не создает новую учетную запись пользователя в пользовательском пуле.
Как можно интегрировать стороннюю аутентификацию с существующим приложением на основе Cognito?
button id="login">Login</button>
<div id="fb-root"></div>
<script type="text/javascript">
var s3 = null;
var appId = '1234567890'; // Facebook app ID
var roleArn = 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>';
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({appId: appId});
document.getElementById('login').onclick = function() {
FB.login(function (response) {
if (response.authResponse) { // logged in
AWS.config.credentials = new AWS.WebIdentityCredentials({
RoleArn: roleArn,
ProviderId: 'graph.facebook.com',
WebIdentityToken: response.authResponse.accessToken
});
s3 = new AWS.S3;
console.log('You are now logged in.');
} else {
console.log('There was a problem logging you in.');
}
});
};
};
// Load the FB JS SDK asynchronously
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>