2016年5月,我们发布了最新版本的Google Identity Toolkit作为Firebase身份验证; 2019年4月,我们发布了Google Cloud的Identity Platform 。这些产品包括升级的客户端SDK,开源UI库,会话管理和用于忘记密码流的集成电子邮件发送服务。

20206月30日,此页面和API设置页面上记录的SDK将停止运行。 (Identity Platform和Firebase身份验证使用的https://identitytoolkit.googleapis.com/...https://securetoken.googleapis.com/...端点将继续运行。)

要从Identity Toolkit迁移现有项目,请参阅《 Identity Platform迁移指南》或《 Firebase身份验证迁移指南》

从 Google Identity Toolkit 迁移到 Google Cloud Identity Platform

最新版本的 Google Identity Toolkit 以 Identity PlatformFirebase Authentication 的形式发布。今后,身份工具包中的功能开发将冻结;所有新的功能开发都将在 Identity Platform 和 Firebase Authentication 中完成。我们建议 Identity Toolkit 开发者在应用可行时尽快迁移到这些平台。

新功能

Identity Platform 与 Google Identity Toolkit 相比,具有显著的功能改进:

  • 新版管理控制台

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

  • 新的身份验证方法

    Identity Platform 支持企业联合标准(例如 SAML 和 OIDC),让您可以扩缩 SaaS 应用和服务。Identity Platform 还为 GitHub、Microsoft、Yahoo 等提供商提供支持。您可以使用匿名登录创建唯一的用户 ID,而无需用户完成任何登录或注册过程;这样,您就可以像普通用户一样进行经过身份验证的 API 调用。当用户决定注册帐号时,系统会保留使用同一用户 ID 的所有 Activity。对于服务器端购物车等应用,或者您希望通过注册流程将用户引导至应用之前与用户进行互动的其他使用场景,这非常有用。

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

    Identity Platform 以 Google 值得信赖的基础架构为基础,提供服务等级协议,并提供 Google Cloud 支持。这意味着您可以放心地扩缩服务,并依赖 Google 来提供所需的弹性、可用性和可伸缩性。

  • 访问所有 Firebase

    Firebase 是一个移动平台,可帮助您快速开发优质应用、扩大用户群并赚取更多收益。Firebase 由多种互补功能组成,您可以自行组合和匹配这些功能以满足自己的需求,其中包括以下基础架构:移动分析云消息传递实时数据库文件存储静态托管远程配置、移动崩溃报告和 Android 测试

  • 更新了界面

    我们已根据 Google 的最新用户体验研究重新构建了界面流程。这包括密码恢复、帐号关联、新帐号/现有帐号消除歧义流程,这类流程通常需要大量时间来编写和调试。它集成了 Android 上的 Smart Lock(密码专用),大大提升了登录应用的登录和注册转化率。它还支持轻松修改主题以契合您的应用,并且 Android 版本和 iOS 版本已开放源代码,以实现最大程度的可定制性。

  • 简化的服务器设置

    我们发现,借助 Identity Toolkit,许多开发者都没有实现电子邮件恢复流程,因此用户会在忘记密码时无法恢复帐号。Identity Platform 可以向用户发送电子邮件验证、重设密码和更改密码消息,并且您可以轻松地为用户自定义文本。此外,您无需再托管用于托管重定向和完成密码更改操作的界面微件

  • 新 SDK

    现在,每个客户端库(Android、iOS、Web)都可原生提供所有 Identity Toolkit 的服务器 API。开发者将能够登录和注册新老用户、访问用户属性、关联、更新和删除帐号、重置密码等,而无需固定使用固定的界面。如果您愿意,可以在此 API 的基础上手动构建自己的整个登录流程和体验。

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

    通过 Identity Toolkit,应用可以根据 Identity Toolkit 中的初始身份验证事件创建自己的会话状态。Identity Platform 使用后端服务,该服务获取根据身份验证事件生成的刷新令牌,并使用该令牌交换 Android、iOS 和 JavaScript 的一小时访问令牌。当用户更改密码后,刷新令牌将无法再生成新的访问令牌,因此会停用访问权限,直到用户在该设备上重新进行身份验证为止。

功能差异

Identity Platform 目前不支持某些 Identity Toolkit 功能,而其他功能已经过重新设计和工作方式不同。如果这些功能对您的应用很重要,您可以选择不立即迁移。在许多情况下,这些功能可能对您的应用并不重要,或者存在一些简单的回退机制,可让您继续进行迁移。

服务器端差异

核心身份工具包服务及其底层 REST API、帐号验证逻辑和主要用户数据库都只进行了细微更新。但是,某些功能以及将 Identity Platform 集成到服务中的方式已更改。

  • 身份提供商

    不支持使用 PayPal 和 AOL。如果用户的 ID 来自这些 IDP,则他们仍然可以使用密码恢复流程登录您的应用,并为他们的帐号设置密码。

  • 服务器库

    目前有适用于 Java、Node.js、Python、Go 和 C# 的 Admin SDK

  • 帐号管理电子邮件

    Firebase 或开发者自己的邮件服务器均可执行密码重置、电子邮件验证和电子邮件更改消息。目前,电子邮件模板仅在界面中提供有限的自定义设置,但可以使用 Admin SDK 进一步自定义

  • 电子邮件地址更改确认

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

    Firebase 通过向旧电子邮件地址发送撤消电子邮件的链接来撤消更改,以确认电子邮件地址更改。

  • IDP 发布

    Identity Toolkit 能够逐步将登录提供方添加到您的登录系统,以便您可以试验对支持请求的影响。Firebase Authentication 已移除此功能。

客户端差异

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

  • 客户端和服务器 SDK

    在 Identity Platform 中,Identity Toolkit&s33; REST API 提供的功能已打包到可用于 Android、iOS 和 JavaScript 的客户端 SDK 中。您可以使用 SDK 登录和注册用户;访问用户个人资料信息;关联、更新和删除帐号;以及使用客户端 SDK 重置密码,而不是通过 REST 调用与后端服务进行通信。

  • 界面微件

    用于管理客户端登录、注册、密码恢复和帐号关联的所有流程都已使用 Client SDK 重新构建,并打包为登录微件。这些 SDK 是适用于 iOSAndroidWeb 的开源 SDK,可让您使用 Identity Toolkit 无法完全自定义流程。

其他差异包括:

  • 会话和迁移

    由于会话在 Identity Toolkit 和 Identity Platform 中的管理方式不同,您的现有会话将在升级 SDK 时终止,并且您的用户必须重新登录。

准备工作

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

  1. 打开 Cloud Console 并选择您的 Identity Toolkit 项目。

  2. 在 Marketplace 中,浏览到 Identity Platform 并选择“启用 Identity Platform”

  3. 打开服务帐号页面。您可以在此处看到之前为 Identity Toolkit 配置的服务帐号。

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

  5. 返回 Cloud Console。 在“提供方”部分的“电子邮件/密码”登录方法中,打开电子邮件模板页面。然后,您可以自定义应用的模板。

    在 Identity Toolkit 中,当用户重置密码、更改电子邮件地址或验证其电子邮件地址时,您需要从 Identity Toolkit 服务器获取 OOB 代码,然后通过电子邮件将代码发送给用户。Identity Platform 会根据您配置的模板发送电子邮件,无需您执行任何其他操作。

  6. 可选:如果您需要在服务器上访问 Identity Platform 服务,请安装 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 Platform 与 Identity Toolkit 的网页实现方式之间存在许多其他差异。

  • 网络会话管理

    以前,当用户使用 Identity Toolkit 微件进行身份验证时,系统会为该用户设置 Cookie,以用于引导会话。此 Cookie 的生命周期为两周,被用来使用帐号管理微件来更改密码和电子邮件地址。某些网站使用此 Cookie 对网站上的所有其他网页请求进行身份验证。其他网站使用 Cookie 通过其框架的 Cookie 管理系统创建自己的 Cookie。

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

    您需要根据应用的安全需求设置 Cookie 的会话生命周期。

  • 网页登录流程

    以前,当用户发起登录以了解用户要使用的标识符时,会被重定向到 accountchooser.com。Identity Platform 界面现在以登录方法列表开头,其中包括通过电子邮件方式转到 accountchooser.com(针对网页)并使用 Android 上的 hintRequest API 的电子邮件选项。此外,界面上不再需要电子邮件地址。这样可以更轻松地支持匿名用户、自定义身份验证用户或不需要电子邮件地址的提供方的用户。

  • 帐号管理微件

    此微件提供了一个界面,供用户更改电子邮件地址、更改密码或解除其帐号与身份提供商的关联。此功能目前正在开发中。

  • 登录按钮/微件

    登录按钮和用户卡片等微件将不再提供。您可以使用 Firebase Authentication API 非常轻松地构建这些 API。

  • 无 signOutUrl

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

  • 无 oobActionUrl

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

  • CSS 自定义

    界面微件使用 Material Design Lite 样式,用于动态添加 Material Design 动画。

第 1 步:更改服务器代码

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

    1. 实现一个端点,以便用户验证 ID 令牌并为用户设置会话 Cookie。客户端应用将 Firebase ID 令牌发送到此端点。
    2. 如果传入的请求包含您自己的会话 Cookie,则可以认为该用户已经过身份验证。否则,将该请求视为未通过身份验证。
    3. 如果您不希望任何用户丢失现有的已登录会话,则应等待两周,以便所有 Identity Toolkit 令牌都过期,或者如下文第 3 步所述,为您的 Web 应用进行双令牌验证。
  2. 接下来,由于 ID 令牌与 Identity Toolkit 令牌不同,因此您必须更新令牌验证逻辑。将 Admin SDK 安装到您的服务器;或者,如果您使用 Admin SDK 不支持的语言,请根据您的环境下载 JWT 令牌验证库并正确验证令牌

  3. 当您首次进行上述更新时,您可能仍有依赖于 Identity Toolkit 令牌的代码路径。如果您使用的是 iOS 或 Android 应用,用户需要升级到新版应用才能使用新的代码路径。如果您不想强制用户更新应用,则可以添加其他服务器验证逻辑,以检查令牌并确定其需要使用 Firebase SDK 还是 Identity Toolkit SDK 来验证令牌。如果您只有 Web 应用,则所有新的身份验证请求都将转移到 Identity Platform,因此您只需使用 ID 令牌验证方法即可。

请参阅 Web API 参考文档

第 2 步:更新 HTML

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

    1. Cloud Console 中打开您的项目。
    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 成功登录后,通过调用 firebase.auth().currentUser.getToken() 获取 ID 令牌。

    2. 将 ID 令牌发送到后端服务器、进行验证,并签发您自己的会话 Cookie。

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

      如果您的框架不提供 CSRF 保护,一种防止攻击的方法是,使用 getToken() 获取已登录用户的 ID 令牌,并在每个请求中包括该令牌(默认情况下,系统也会发送会话 Cookie)。然后,除了后端框架完成的会话 Cookie 检查之外,您还需要使用 Admin SDK 验证该令牌。这会增加 CSRF 攻击的成功率,因为 Id 令牌仅使用网页存储空间存储,绝不会存储在 Cookie 中。

    3. Identity Toolkit 令牌的有效期为两周。您可能需要继续发出可持续两周的令牌,或者根据应用的安全要求相应地延长或缩短令牌时间。当用户退出时,请清除会话 Cookie。

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

  1. Cloud Console 中,打开提供商部分。

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

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

Android

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

  1. 打开 Cloud Console,然后选择您的身份工具包项目。

  2. 在“提供方”页面上,点击应用设置详情,选择 Android 标签页,然后点击 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) 中,在 Android Gradle 插件之后添加以下代码行,以启用 Google 服务插件:

    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:21.0.6'
    compile 'com.google.android.gms:play-services-auth:20.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 Console,然后选择您的身份工具包项目。

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

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

第 2 步:移除 Identity Toolkit SDK

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

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

  1. FirebaseUI 身份验证添加到您的应用。

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