首页 文章

使用Google作为身份提供者在AWS Cognito用户/身份池中对用户进行身份验证

提问于
浏览
2

AWS提供了两种处理Cognito的方法:

  • "old one"来自 amazon-cognito-identity-js (可能 amazon-cognito-auth-js )和

  • "new one"来自 aws-amplify (其中包括以上内容)

经过相当多的麻烦和逆向工程后,我成功地使用 aws-amplify locally 登录(收回CognitoIdentityCredentials)作为开发工作的一部分 .

这些步骤(承担我,因为这些对于要遵循的问题很重要,也可能对某些人有帮助):

设置

  • 在Cognito控制台中创建用户池

  • 在Cognito控制台中创建用户池App客户端

  • 在Google控制台中创建Google Web App

  • 配置Google Web App指向http://localhost:8080(我的本地开发服务器)

  • 配置用户池以将Google用作身份提供商,从Google控制台向其提供Google Web App客户端ID和客户端密钥

  • 在Congnito控制台中创建一个标识池,并将其配置为与Google一起作为身份提供商使用,同时提供Google Web App客户端ID

实施

  • 配置Amplify.Auth:
Amplify.configure({
    Auth: {
        identityPoolId: ,
        region: ,
        userPoolId: ,
        userPoolWebClientId: 
    }
});
  • 注入Google API脚本:
const script = document.createElement('script');
script.src = 'https://apis.google.com/js/platform.js';
script.async = true;
script.onload = this.initGapi;
document.body.appendChild(script);
  • 初始版Google API:
window.gapi.load('auth2', function() {
    window.gapi.auth2.init({
        client_id: ,
        scope: 'profile email openid'
    });
});
  • 点击按钮,允许Google用户唱歌:
const ga = window.gapi.auth2.getAuthInstance();
const googleUser = await ga.signIn();
const {id_token, expires_at} = googleUser.getAuthResponse();
const profile = googleUser.getBasicProfile();
  • 使用上面的 profileid_tokenexpires_at 创建Cognito凭据会话:
const user = {
    email: profile.getEmail(),
    name: profile.getName()
};

const credentials = await Auth.federatedSignIn(
    'google',
    {token: id_token, expires_at},
    user
);

此时返回 CognitoIdentityCredentials 对象,正确填充,带有令牌和所有...

问题

不幸的是, aws-amplify 为我的应用程序webpack包添加了一个惊人的 190K (GZIPped,缩小,优化),这使我呛到我的咖啡 .

问题1

这可以通过一个Babel插件以某种方式减少我猜测,不,因为AWS显然仍然在1995年并且在单个 AmplifyAuth 对象上配置所有东西) .

问题2

我是否已经使这不必要地变得复杂并且有一个更强大的解决方案?

问题3(最重要的)

这可以使用"old way" amazon-cognito-identity-js 来实现吗?

在所有(用例)中,我找不到[https://github.com/aws/aws-amplify/tree/master/packages/amazon-cognito-identity-js/]社交/联合登录的用例 .

1 回答

  • 0

    您可以尝试在AWS放大中使用模块化导出

相关问题