使用Google作为身份提供者

时间:2018-05-27 15:36:07

标签: javascript authentication amazon-cognito googlesigninapi

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

  1. “old one”通过amazon-cognito-identity-js(可能还有amazon-cognito-auth-js)和
  2. “new one”来自aws-amplify(包含上述内容)
  3. 经过相当多的麻烦和逆向工程后,我成功地使用aws-amplify 本地登录(收回CognitoIdentityCredentials)作为开发工作的一部分。

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

    设置

    1. 在Cognito控制台中创建用户池

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

    3. 在Google控制台中创建Google Web App

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

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

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

    7. 实施

      1. 配置Amplify.Auth:
      2. Amplify.configure({
            Auth: {
                identityPoolId: ,
                region: ,
                userPoolId: ,
                userPoolWebClientId: 
            }
        });
        
        1. 注入Google API脚本:
        2. 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);
          
          1. 初始版Google API:
          2. window.gapi.load('auth2', function() {
                window.gapi.auth2.init({
                    client_id: ,
                    scope: 'profile email openid'
                });
            });
            
            1. 点击按钮,允许Google用户唱歌:
            2. const ga = window.gapi.auth2.getAuthInstance();
              const googleUser = await ga.signIn();
              const {id_token, expires_at} = googleUser.getAuthResponse();
              const profile = googleUser.getBasicProfile();
              
              1. 使用上面的profileid_tokenexpires_at创建Cognito凭据会话:
              2. const user = {
                    email: profile.getEmail(),
                    name: profile.getName()
                };
                
                const credentials = await Auth.federatedSignIn(
                    'google',
                    {token: id_token, expires_at},
                    user
                );
                

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

                问题

                不幸的是,aws-amplify为我的应用程序webpack捆绑包(GZIPped,缩小版,优化版)添加了一个高达 190K ,这让我呛到了我的咖啡。

                问题1

                这可以通过我丢失的Babel插件以某种方式减少(我猜,不,因为AWS显然仍然在1995年并且在单个AmplifyAuth对象上配置所有内容)

                问题2

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

                问题3(最重要的)

                是否可以使用“旧方式”amazon-cognito-identity-js来实现这一目标,这个方法要小得多?

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

2 个答案:

答案 0 :(得分:1)

对我来说,两者之间的区别

import Amplify from 'aws-amplify'

import Amplify from '@aws-amplify/core'

已优化并缩小了约500kB。

我想你也想要

import Auth from '@aws-amplify/auth'

仅增加一点点。

但是我同意,aws-amplify包确实很大,而且不容易弄清楚如何直接使用核心组件(例如aws-cognito-identity-js / es和aws-cognito-auth-js / es)。

答案 1 :(得分:0)

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