【问题标题】:Authenticating user in AWS Cognito User/Identity Pool with Google as identity provider使用 Google 作为身份提供商对 AWS Cognito 用户/身份池中的用户进行身份验证
【发布时间】:2018-11-06 07:16:14
【问题描述】:

AWS 提供了两种可能的方式来处理 Cognito:

  1. “旧的”通过amazon-cognito-identity-js(可能还有amazon-cognito-auth-js)和
  2. “新的”通过aws-amplify(包括上面的一个)

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

步骤(请耐心等待,因为这些对于接下来的问题很重要,也可能对某人有所帮助):

设置

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

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

  3. 在 Google 控制台中创建 Google Web 应用

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

  5. 将用户池配置为使用 Google 作为身份提供者,并为它提供来自 Google 控制台的 Google Web App 客户端 ID 和客户端密码

  6. 在 Congnito 控制台中创建一个身份池,并将其配置为与 Google 作为身份提供者一起使用,并在那里提供 Google Web App 客户端 ID

实施

  1. 配置 Amplify.Auth:
放大。配置({ 授权:{ 身份池 ID: , 地区: , 用户池 ID: , 用户池WebClientId: } });
  1. 注入 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(脚本);
  1. 初始化 Google API:
window.gapi.load('auth2', function() { window.gapi.auth2.init({ client_id: , 范围:'个人资料电子邮件openid' }); });
  1. 允许通过单击按钮让 Google 用户唱歌:
const ga = window.gapi.auth2.getAuthInstance(); const googleUser = 等待 ga.signIn(); 常量 {id_token, expires_at} = googleUser.getAuthResponse(); 常量配置文件 = googleUser.getBasicProfile();
  1. 使用上面的profileid_tokenexpires_at 创建 Cognito 凭据会话:
常量用户 = { 电子邮件:profile.getEmail(), 名称:profile.getName() }; const 凭据 = 等待 Auth.federatedSignIn( '谷歌', {token: id_token, expires_at}, 用户 );

此时返回了一个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/] 中,我找不到社交/联合登录的用例。

【问题讨论】:

  • 您能帮帮我吗?我正在尝试实施类似的解决方案,但我被困在身份池中,我不知道如何与用户池集成
  • @placplacboom 在用户池(创建后)上有一个设置,可以让您定义身份池。就我而言,我配置了 Google,因此我必须提供一个 ID,该 ID 是从 Google Developer Console 获得的。您必须在那里创建一个应用程序,然后您才能配置身份提供者。

标签: javascript authentication amazon-cognito googlesigninapi


【解决方案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)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 想详细说明一下,或许可以举个例子?您提供的上下文越多,对其他人的意义就越大。
    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2018-01-22
    • 2018-09-03
    • 2021-11-24
    • 2016-08-18
    • 1970-01-01
    • 2017-01-02
    • 2020-06-21
    相关资源
    最近更新 更多