从 Google Identity Toolkit 迁移到 Google Cloud Identity Platform

最新版本的 Google Identity Toolkit 已经发布为 Identity PlatformFirebase Authentication。 今后,Identity Toolkit 的功能工作将冻结;全新 功能开发将在 Identity Platform 和 Firebase 上完成 身份验证。我们建议 Identity Toolkit 开发者改用 使用这些平台的应用。

新功能

Identity Platform 已在 Google Identity Toolkit:

  • 新版管理控制台

    Identity Platform 具有 新版开发者控制台 以便查看、修改和删除您的用户;这可能会有帮助 调试登录和注册流程。通过该控制台 配置身份验证方法并自定义电子邮件模板。

  • 新的身份验证方法

    Identity Platform 支持 SAML 和 OIDC,让您能够扩缩 SaaS 应用和服务。还可以通过 可为 GitHub、Microsoft、Yahoo 等提供商提供支持。 您可以使用匿名登录来创建唯一身份用户 ID, 要求用户完成所有登录或注册过程;这样可让 您可以像使用普通用户一样进行经过身份验证的 API 调用。时间 当用户决定注册账号时,所有活动都会通过 相同的用户 ID。这对于服务器端购物等场景很有用 您希望在发送之前与用户互动的购物车或其他应用 完成注册流程。

  • 借助服务等级协议和 Cloud 支持,自信地扩大规模

    Identity Platform 建立在值得信赖的 Google 基础架构之上, 服务等级协议 和 Google Cloud 支持服务。这意味着您可以扩缩服务 并有赖于 Google 提供的弹性、可用性 和可伸缩性方面的解决方案

  • 拥有对所有 Firebase 的访问权限

    Firebase 是一个移动平台,可帮助您快速开发优质的 扩大用户群,赚取更多收益。Firebase 由 您可以自行组合和匹配功能,以满足自己的需求和 包括用于以下各项的基础架构: 移动分析Cloud MessagingRealtime Database 文件存储静态托管远程配置、 移动设备崩溃报告和 Android 测试

  • 更新后的界面

    我们根据 Google 的最新用户体验彻底重建了界面流程 。这些服务包括密码恢复、账号关联、新建/现有 账号消除歧义流程,这些流程通常需要花费大量时间来编写和 调试。它集成了 Smart Lock(密码专用) 显著提高了登录和注册转化率 支持此功能的应用 它还支持简单的主题修改以匹配您的应用,并且 最大可定制性,AndroidiOS 已经开源

  • 简化的服务器设置

    使用 Identity Toolkit,我们发现许多开发者选择不实现 使用户无法恢复的电子邮件 如果他们忘记了密码Identity Platform 向 发送电子邮件验证、重设密码和更改密码讯息至 用户可轻松对文字进行自定义 。此外,您无需再托管 界面微件,用于托管重定向和 密码更改操作。

  • 新 SDK

    Identity Toolkit 的所有服务器 API 现在都以原生方式提供, 两种客户端库(Android、iOS、Web)。开发者将能够 注册和注册新老用户、访问用户属性、关联、更新和 删除账号、重置密码等,而不受固定界面的束缚。 如果您愿意,也可以手动构建自己的整个登录流程并 熟悉此 API

  • 针对移动应用的会话管理

    借助 Identity Toolkit,应用可以根据 来自 Identity Toolkit 的初始身份验证事件。Identity Platform 使用 用于接受刷新令牌(通过身份验证生成的)的后端服务 并使用该令牌来换取 Android、iOS 和 JavaScript。当用户更改密码时,刷新令牌不会 无法再生成新的访问令牌,从而停用访问权限,直到 用户需在该设备上重新进行身份验证。

功能差异

Identity 中的部分 Identity Toolkit 功能目前无法使用 同时,其他功能已经过重新设计,运作方式也有所不同。 如果这些功能对您来说很重要,您可以选择不立即迁移 。在许多情况下,这些功能对您的应用可能并不重要 有一些简单的备用方法,使您能够继续进行迁移。

服务器端差异

核心 Identity Toolkit 服务及其底层 REST API 的账号 验证逻辑和主要用户数据库仅进行了细微更新。 但是,Identity Platform 的一些功能以及集成方式 更改

  • 身份提供方

    不支持 PayPal 和 AOL。用户 来自这些 IDP 的账户仍可通过 密码恢复流程,并为其账号设置密码。

  • 服务器库

    目前,我们提供 Admin SDK 适用于 Java、Node.js、Python、Go 和 C#。

  • 账号管理电子邮件

    密码重置、电子邮件验证和电子邮件更改消息 或开发者的 自己的邮件服务器。目前,电子邮件模板仅提供有限的 自定义,但您也可以使用 Admin SDK

  • 电子邮件地址更改确认

    在 Identity Toolkit 中,当用户决定更改其电子邮件地址时, 向新地址发送一封电子邮件,其中包含用于继续发送电子邮件的链接 地址更改流程

    Firebase 通过向以下地址发送一封撤消电子邮件来确认电子邮件地址变更: 包含用于还原更改的链接的旧电子邮件地址。

  • IdP 发布

    Identity Toolkit 能够为您的登录信息添加身份提供方 以便您可以试验其对广告效果的影响 支持请求此功能已从 Firebase Authentication 中移除。

客户端差异

在 Identity Platform 中,Google Identity Toolkit 提供的功能分为 分成两个部分:

  • 客户端 SDK 和服务器 SDK

    在 Identity Platform 中,Identity Toolkit REST API 已打包到可用于 Android、iOS 和 JavaScript。您可以使用 SDK 登录和注册用户;访问用户 个人资料信息;关联、更新和删除账号;并重置密码 而不是通过 REST 调用。

  • 界面 widget

    管理登录、注册、密码恢复和 使用客户端 SDK 重新构建了账号关联,并打包为 登录 widget。它们以开源 SDK 的形式提供给 iOSAndroid网站和 可让您以 Cloud SQL API 所无法实现的方式 Identity Toolkit。

其他差异包括:

  • 会话和迁移

    因为会话在 Identity Toolkit 和 Identity 中的管理方式不同 您用户的现有会话将终止 升级 SDK,并且您的用户需要重新登录。

准备工作

在从 Identity Toolkit 迁移到 Identity Platform 之前, 必须:

  1. 打开 Cloud 控制台,然后选择您的 Identity Toolkit 项目中。

  2. 在 Marketplace 中,浏览至 Identity Platform 然后选择“启用 Identity Platform”

  3. 打开服务账号页。在这里,您可以看到 针对 Identity Toolkit 进行了配置。

  4. 在相应服务账号旁边,点击 创建密钥。然后,在 创建私钥对话框中,将密钥类型设置为 JSON,然后点击 创建。包含您的服务账号凭据的 JSON 文件 。您在下一步初始化 SDK 时需要用到此文件。

  5. 返回 Cloud 控制台。 “ Providers”(提供商)部分的“Email/Password”(电子邮件/密码)登录方法 打开电子邮件模板页面。然后,您可以自定义 模板。

    在 Identity Toolkit 中,当用户重置密码、更改电子邮件地址或 验证电子邮件地址,您需要从 Identity Toolkit 服务器,然后通过电子邮件将代码发送给用户。 Identity Platform 根据您配置的模板发送电子邮件,但不 您需要执行一些额外操作。

  6. 可选:如果您需要在 服务器,请安装 Firebase SDK。

    1. 您可以使用 npm 安装 Node.js Admin SDK:

      $ npm init
      $ npm install --save firebase-admin
      
    2. 在您的代码中,您可以通过以下方式访问 Firebase:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

接下来,针对您的应用平台(AndroidiOSWeb

服务器和 JavaScript

显著变更

在网络实施方面, Identity Toolkit 中的 Identity Platform。

  • Web 会话管理

    以前,当用户使用 Identity Toolkit 微件, 设置了一个 Cookie 引导会话。 此 Cookie 的有效期为 2 周,用于允许用户 账号管理微件可更改密码和电子邮件地址。部分 网站使用此 Cookie 验证网站上的所有其他网页请求。 其他网站也使用 Cookie 创建自己的 Cookie, 框架的 Cookie 管理系统。

    Identity Platform 客户端 SDK 现可管理 ID 令牌 并使用 Identity Platform 的后端将会话保持最新状态。 当有重要账号更改(如用户 密码更改)。ID 令牌不会自动 在 Web 客户端上设置为 Cookie,并且生命周期仅有一小时。除非您 只希望一个小时的会话,ID 令牌不适合 用作 Cookie 来验证您的所有网页请求。您需改为 您需要设置监听器 当用户登录时触发 获取 ID 令牌验证令牌,然后创建 通过框架的 Cookie 管理系统获取自己的 Cookie。

    您需要根据 应用的安全需求

  • 网页登录流程

    之前,在登录时,系统会将用户重定向到 accountchooser.com 以了解用户要使用的标识符。Identity Platform 界面流程现在从登录方法列表(包括电子邮件地址)开始 此选项会转到 accountchooser.com(网页版),并使用 调用 hintRequest API Android。此外,在界面中也不再需要电子邮件地址。 这样可以更轻松地支持匿名用户和自定义身份验证用户 或来自提供商不需要电子邮件地址的用户。

  • “账号管理”微件

    此 widget 提供了一个界面,可供用户更改电子邮件地址、更改 或解除其账号与身份提供方的关联。目前 。

  • 登录按钮/微件

    我们不再提供登录按钮和用户卡片等 widget。他们 使用 Firebase Authentication API 可以非常轻松地进行构建。

  • 没有 signOutUrl

    您需要调用 firebase.auth.signOut() 并处理回调。

  • 无 oobActionUrl

    电子邮件发送现在由 Identity Platform 处理,并在 Firebase 控制台。

  • CSS 自定义

    该界面 widget 使用 Material Design Lite 样式, 动态添加 Material Design 动画。

第 1 步:更改服务器代码

  1. 如果您的服务器依赖 Identity Toolkit 令牌(有效期为两周)来 管理 Web 用户会话,您需要将服务器转换为使用自己的 会话 Cookie。

    1. 实现端点 验证 ID 令牌 并为该用户设置会话 Cookie客户端应用发送 将 Firebase ID 令牌传送至此端点。
    2. 如果传入请求包含您自己的会话 Cookie,您可以 将该用户视为已通过身份验证否则,请将该请求视为 未经身份验证。
    3. 如果您不希望任何用户丢失其现有的登录凭证 您应该等待两周来获得所有 Identity Toolkit 令牌 也可以为 Web 应用执行双令牌验证 如下文第 3 步所述。
  2. 接下来,由于 Id 令牌与 Identity Toolkit 不同 您必须更新令牌验证逻辑。安装 Admin SDK 您的服务器或者,如果您使用 Admin SDK 不支持的语言, 下载 JWT 令牌验证库 以适当的方式 验证令牌

  3. 首次进行上述更新时,您可能仍会有一些代码路径 依赖于 Identity Toolkit 令牌。如果您有 iOS 或 Android 应用, 用户将需要升级到应用的新版本 新的代码路径将正常运行。如果您不想强制用户更新 您可以添加额外的服务器验证逻辑来检查 令牌,并确定是否需要使用 Firebase SDK 或 Identity Toolkit SDK 验证令牌。如果您只有一个网站 所有新的身份验证请求都将转到 因此您只需使用 Id 令牌 验证方法。

请参阅 Web API 参考文档

第 2 步:更新 HTML

  1. 将初始化代码添加到您的应用中:

    1. Cloud 控制台
    2. 提供商上 页面上,点击应用设置详情。一个代码段 初始化 Identity Platform。
    3. 复制初始化代码段并将其粘贴到您的网页。
  2. 添加 Authentication widget

    <script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" />
    <!-- *******************************************************************************************
       * TODO(DEVELOPER): Paste the initialization snippet from:
       * Firebase Console > Overview > Add Firebase to your web app. *
       ***************************************************************************************** -->
    <script type="text/javascript">
      // FirebaseUI config.
      var uiConfig = {
        'signInSuccessUrl': '<url-to-redirect-to-on-success>',
        'signInOptions': [
          // Leave the lines as is for the providers you want to offer your users.
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
          firebase.auth.TwitterAuthProvider.PROVIDER_ID,
          firebase.auth.GithubAuthProvider.PROVIDER_ID,
          firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        'tosUrl': '<your-tos-url>',
      };
    
      // Initialize the FirebaseUI Widget using Firebase.
      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      // The start method will wait until the DOM is loaded.
      ui.start('#firebaseui-auth-container', uiConfig);
    </script>
    
  3. 从您的应用中移除 Identity Toolkit SDK。

  4. 如果您依赖 Identity Toolkit ID 令牌进行会话管理, 必须在客户端进行以下更改:

    1. 使用 Identity Platform 成功登录后,通过以下方式获取 ID 令牌: 正在调用 firebase.auth().currentUser.getToken()

    2. 将 ID 令牌发送到后端服务器,对其进行验证,然后发出 您自己的会话 Cookie

      在对敏感数据执行敏感操作时, 操作或向服务器发送经过身份验证的修改请求。您 需要提供额外的跨网站伪造请求 (CSRF) 保护。

      如果您的框架不提供 CSRF 保护,可以通过一种方式来 则攻击获取已登录用户的 Id 令牌 使用 getToken(),并在每个请求(会话 Cookie)。然后验证该令牌 以及使用 Admin SDK 进行会话 Cookie 检查 后端框架完成的任务这会增加 CSRF 攻击取得成功,因为 ID 令牌仅使用 而不得存储在 Cookie 中。

    3. Identity Toolkit 令牌的有效期为两周。您可能需要 继续发放两周前的令牌。 具体取决于应用的安全要求。 当用户退出登录时,清除会话 Cookie。

第 3 步:更新 IDP 重定向网址

  1. Cloud 控制台中,执行以下操作: 打开提供商 部分。

  2. 对于您支持的每个联合登录提供方,请执行以下操作:

    1. 点击登录提供方的名称。
    2. 复制 OAuth 重定向 URI。
    3. 在登录提供方的开发者控制台中,更新 OAuth 重定向 URI

Android

第 1 步:使用 Firebase 将 Identity Platform 添加到您的应用

  1. 打开 Cloud 控制台和 选择您的 Identity Toolkit 项目。

  2. 在“提供商”页面上,点击应用设置详情,然后选择 Android 标签页,然后点击 Get Started in Firebase。 在“添加 Firebase”对话框中,提供应用的软件包名称和签名 证书指纹,然后点击添加应用google-services.json 配置文件随后会下载到您的计算机中。

  3. 将配置文件复制到 Android 应用模块的根目录。这个 配置文件包含项目和 Google OAuth 客户端信息。

  4. 在项目级 build.gradle 文件中 (<var>your-project</var>/build.gradle),请在以下位置指定应用的软件包名称: defaultConfig 部分:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. 同样在项目级 build.gradle 文件中,添加一个要包含的依赖项 google-services 插件:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. 在应用的应用级 build.gradle 文件中 (<var>my-project</var>/<var>app-module</var>/build.gradle),请添加 添加以下代码行,以启用 google-services 插件:

    apply plugin: 'com.android.application'
    // Add this line
    apply plugin: 'com.google.gms.google-services'
    

    google-services 插件使用 google-services.json 文件来配置 使用 Firebase。

  7. 同样在应用级 build.gradle 文件中,添加 Firebase Authentication 依赖项:

    compile 'com.google.firebase:firebase-auth:23.0.0'
    compile 'com.google.android.gms:play-services-auth:21.2.0'
    

第 2 步:移除 Identity Toolkit SDK

  1. AndroidManifest.xml 中移除 Identity Toolkit 配置 文件。此信息包含在 google-service.json 文件中,并且 由 google-services 插件加载。
  2. 从您的应用中移除 Identity Toolkit SDK。

第 3 步:将 FirebaseUI 添加到您的应用

  1. 添加 FirebaseUI 身份验证 应用

  2. 在您的应用中,将对 Identity Toolkit SDK 的调用替换为对 FirebaseUI。

iOS

第 1 步:将 Firebase 添加到您的应用

  1. 运行以下命令,将客户端 SDK 添加到您的应用:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. 打开 Cloud 控制台和 选择您的 Identity Toolkit 项目。

  3. 在“提供方”页面上,点击应用设置详情,然后选择 iOS 标签页,然后点击开始使用 Firebase。在“添加 Firebase”对话框中 提供应用的软件包名称和签名证书指纹,以及 点击添加应用google-services.json配置文件 已下载到您的计算机中。在“添加 Firebase”对话框中,提供应用的 软件包 ID 和 App Store ID,然后点击添加应用GoogleService-Info.plist 配置文件随后会下载到您的 计算机。如果您的项目中有多个软件包 ID,请为每个软件包 ID 都必须在 Firebase 控制台中连接,这样它才能拥有自己的 GoogleService-Info.plist 文件。

  4. 将配置文件复制到 Xcode 项目的根目录,并将其添加到 所有目标。

第 2 步:移除 Identity Toolkit SDK

  1. 从应用的 Podfile 中移除 GoogleIdentityToolkit
  2. 运行 pod install 命令。

第 3 步:将 FirebaseUI 添加到您的应用

  1. 添加 FirebaseUI 身份验证 应用

  2. 在您的应用中,将对 Identity Toolkit SDK 的调用替换为对 FirebaseUI。