最新版 Google Identity Toolkit 已发布为 Identity Platform 和 Firebase 身份验证。今后,Identity Toolkit 的功能开发工作将停止;所有新功能都将在 Identity Platform 和 Firebase Authentication 上开发。我们建议 Identity Toolkit 开发者尽快迁移到这些平台,以便充分利用这些平台。
新功能
与 Google Identity Toolkit 相比,Identity Platform 在功能方面已有了显著增强:
新版管理控制台
Identity Platform 具有新的开发者控制台,可让您查看、修改和删除用户;这有助于调试登录和注册流程。您还可以在控制台中配置身份验证方法和自定义电子邮件模板。
新的身份验证方法
Identity Platform 支持企业联盟标准(例如 SAML 和 OIDC),使您能够扩缩 SaaS 应用和服务。Identity Platform 还支持 GitHub、Microsoft、Yahoo 等提供商。您可以使用匿名登录来创建唯一的用户 ID,而无需用户完成任何登录或注册流程;这样一来,您就可以像使用常规用户一样发出经过身份验证的 API 调用。当用户决定注册账号时,所有活动都会保留,并且使用相同的 User-ID。这对于服务器端购物车等场景非常有用,在这些场景中,您希望在引导用户完成注册流程之前先吸引用户。
借助服务等级协议和云支持,放心地进行扩缩
Identity Platform 基于可信的 Google 基础架构构建,并提供 服务等级协议和 Google Cloud 支持。这意味着您可以放心地扩展服务,并依靠 Google 提供所需的弹性、可用性和可伸缩性。
访问所有 Firebase 产品
Firebase 是一个移动平台,可帮助您快速开发高品质应用、扩大用户群并赚取更多收入。Firebase 由一些互补的功能组成,您可以根据自己的需求随意组合这些功能,它还包含以下方面的基础架构:移动分析、Cloud Messaging、实时数据库、文件存储、静态托管、远程配置、移动崩溃报告和 Android 测试。
更新后的界面
我们已根据 Google 最新的用户体验研究成果,完全重新构建了界面流程。这包括密码恢复、账号关联、新账号/现有账号消除歧义流程,这些流程通常需要花费大量时间进行编码和调试。它集成了 Android 上的 Smart Lock(密码专用),显著提高了参与测试的应用的登录和注册转化率。 它还支持轻松修改主题以匹配您的应用,并且为了实现最大程度的自定义,Android 和 iOS 版本已开源。
简化的服务器设置
我们发现,许多开发者在使用 Identity Toolkit 时选择不实现电子邮件恢复流程,这导致其用户在忘记密码时无法恢复账号。Identity Platform 可以向用户发送电子邮件验证、密码重置和密码更改消息,并且可以轻松地为用户自定义这些消息的文本。此外,您不再需要托管用于托管重定向和完成密码更改操作的 界面微件。
新 SDK
现在,所有 Identity Toolkit 的服务器 API 都可以通过我们的每个客户端库(Android、iOS、Web)以原生方式使用。开发者将能够登录和注册新旧用户、访问用户属性、关联、更新和删除账号、重置密码等,而无需绑定到固定的界面。 如果您愿意,也可以基于此 API 手动构建自己的完整登录流程和体验。
移动应用的会话管理
借助 Identity Toolkit,应用可以根据 Identity Toolkit 的初始身份验证事件创建自己的会话状态。Identity Platform 使用后端服务,该服务会获取从身份验证事件中生成的刷新令牌,并将其换成有效期为一小时的 Android、iOS 和 JavaScript 访问令牌。当用户更改密码时,刷新令牌将无法再生成新的访问令牌,从而停用访问权限,直到用户在该设备上重新进行身份验证。
功能差异
Identity Platform 目前不支持部分 Identity Toolkit 功能,而其他功能已重新设计,运作方式也有所不同。 如果这些功能对您的应用很重要,您可以选择不立即迁移。在许多情况下,这些功能可能对您的应用并不重要,或者可能存在简单的回退,让您可以继续进行迁移。
服务器端差异
核心 Identity Toolkit 服务及其底层 REST API、账号验证逻辑和主用户数据库仅进行了小幅更新。但某些功能以及将 Identity Platform 集成到服务中的方式已发生变化。
身份提供商
不支持 PayPal 和 AOL。如果用户使用的是这些 IDP 的账号,仍然可以通过密码恢复流程登录您的应用,并为其账号设置密码。
服务器库
目前,我们提供适用于 Java、Node.js、Python、Go 和 C# 的 Admin SDK。
账号管理电子邮件地址
密码重置、电子邮件验证和电子邮件更改消息可以由 Firebase 执行,也可以通过开发者自己的邮件服务器执行。目前,电子邮件模板只能通过界面进行有限的自定义,但可以使用 Admin SDK 进一步自定义
电子邮件地址更改确认
在 Identity Toolkit 中,当用户决定更改电子邮件地址时,系统会向新地址发送一封电子邮件,其中包含一个用于继续电子邮件地址更改流程的链接。
Firebase 会向旧电子邮件地址发送一封撤消电子邮件,其中包含一个用于恢复更改的链接,以确认电子邮件地址更改。
IDP 发布
Identity Toolkit 能够逐步向登录系统添加身份提供商,以便您可以实验性地了解对支持请求的影响。此功能已在 Firebase Authentication 中移除。
客户端差异
在 Identity Platform 中,Google Identity 工具包提供的功能分为两个组件:
客户端和服务器 SDK
在 Identity Platform 中,Identity Toolkit 的 REST API 提供的功能已打包到适用于 Android、iOS 和 JavaScript 的客户端 SDK 中。您可以使用该 SDK 登录和注册用户;访问用户个人资料信息;关联、更新和删除账号;以及使用客户端 SDK 重置密码,而无需通过 REST 调用与后端服务通信。
界面 widget
所有用于管理登录、注册、密码恢复和账号关联的界面流程均已使用客户端 SDK 重新构建,并打包为登录 widget。这些 SDK 以开源形式提供,适用于 iOS、Android 和 Web,可让您以 Identity Toolkit 无法实现的方式完全自定义流程。
其他差异包括:
会话和迁移
由于 Identity Toolkit 和 Identity Platform 对会话的管理方式不同,因此在升级 SDK 后,用户现有的会话将被终止,用户必须重新登录。
准备工作
在从 Identity Toolkit 迁移到 Identity Platform 之前,您必须执行以下操作:
打开 Cloud 控制台,然后选择您的 Identity Toolkit 项目。
在 Marketplace 中,浏览到 Identity Platform 并选择“启用 Identity Platform”
打开服务账号页。您可以在此处看到之前为 Identity Toolkit 配置的服务账号。
点击服务账号旁边的 more_vert > 创建密钥。然后,在创建私钥对话框中,将“密钥类型”设置为 JSON,然后点击创建。系统会为您下载一个包含服务账号凭据的 JSON 文件。您在下一步初始化 SDK 时需要用到此文件。
返回 Cloud 控制台。 在“提供方”部分中,打开“电子邮件地址/密码”登录方法中的电子邮件模板页面。然后,您可以自定义应用的模板。
在 Identity Toolkit 中,当用户重置密码、更改电子邮件地址或验证电子邮件地址时,您需要从 Identity Toolkit 服务器获取 OOB 代码,然后通过电子邮件将该代码发送给用户。Identity Platform 会根据您配置的模板发送电子邮件,无需您执行任何其他操作。
可选:如果您需要在服务器上访问 Identity Platform 服务,请安装 Firebase SDK。
您可以使用
npm
安装 Node.js Admin SDK:$ npm init $ npm install --save firebase-admin
在代码中,您可以使用以下方式访问 Firebase:
var admin = require('firebase-admin'); var app = admin.initializeApp({ credential: admin.credential.cert('path/to/serviceAccountCredentials.json') });
接下来,请针对您应用的平台完成迁移步骤:Android、iOS、Web。
服务器和 JavaScript
显著变更
Identity Platform 的 Web 实现与 Identity Toolkit 相比,还有许多其他区别。
Web 会话管理
以前,当用户使用身份工具包 widget 进行身份验证时,系统会为用户设置一个 Cookie,该 Cookie 用于引导会话。此 Cookie 的有效期为两周,用于允许用户使用账号管理 widget 更改密码和电子邮件地址。部分网站使用此 Cookie 对网站上的所有其他网页请求进行身份验证。其他网站使用该 Cookie 通过其框架的 Cookie 管理系统创建自己的 Cookie。
Identity Platform 客户端 SDK 现在可以管理 ID 令牌,并与 Identity Platform 的后端配合使用,以保持会话有效。当发生重要的账号更改(例如用户密码更改)时,后端会使会话过期。ID 令牌不会自动设置为 Web 客户端上的 Cookie,并且生命周期只有一小时。除非您只希望会话持续一小时,否则不适合使用 ID 令牌作为 Cookie 来验证所有网页请求。您需要设置监听器,以便在用户登录时获取 ID 令牌、验证令牌,并通过框架的 Cookie 管理系统创建自己的 Cookie。
您需要根据应用的安全需求设置 Cookie 的会话生命周期。
网页登录流程
以前,当用户发起登录时,系统会将用户重定向到
accountchooser.com
,以了解用户想要使用的标识符。Identity Platform 界面流程现在从登录方法列表开始,其中包括电子邮件选项,该选项会转到accountchooser.com
(适用于 Web)并使用 Android 上的 hintRequest API。此外,界面中不再需要电子邮件地址。 这样一来,您就可以更轻松地支持匿名用户、自定义身份验证用户或来自不需要电子邮件地址的提供方的用户。账号管理微件
此 widget 为用户提供了一个界面,用于更改电子邮件地址、更改密码或取消账号与身份提供方的关联。目前正在开发中。
登录按钮/微件
不再提供登录按钮和用户卡片等 widget。可以使用 Firebase Authentication API 非常轻松地构建这些功能。
没有 signOutUrl
您需要调用
firebase.auth.signOut()
并处理回调。没有 oobActionUrl
电子邮件发送现在由 Identity Platform 处理,并在 Firebase 控制台中进行配置。
CSS 自定义
界面 widget 使用 Material Design Lite 样式,该样式会动态添加 Material Design 动画。
第 1 步:更改服务器代码
如果您的服务器依赖于 Identity Toolkit 令牌(有效期为两周)来管理 Web 用户会话,则需要将服务器转换为使用自己的会话 Cookie。
- 实现一个用于验证 ID 令牌和为用户设置会话 Cookie 的端点。客户端应用将 Firebase ID 令牌发送到此端点。
- 如果传入的请求包含您自己的会话 Cookie,您可以认为用户已通过身份验证。否则,将请求视为未经身份验证的请求。
- 如果您不希望任何用户丢失其现有的登录会话,则应等待两周,让所有 Identity Toolkit 令牌过期,或者还应为您的 Web 应用执行双令牌验证(如下面步骤 3 中所述)。
接下来,由于 ID 令牌与 Identity Toolkit 令牌不同,您必须更新令牌验证逻辑。在服务器上安装 Admin SDK;或者,如果您使用的语言不受 Admin SDK 支持,请下载适用于您环境的 JWT 令牌验证库,并正确验证令牌。
首次进行上述更新时,您可能仍有依赖于 Identity Toolkit 令牌的代码路径。如果您有 iOS 或 Android 应用,用户需要升级到新版应用,新代码路径才能正常运行。如果您不想强制用户更新应用,可以添加额外的服务器验证逻辑,用于检查令牌并确定是否需要使用 Firebase SDK 或 Identity Toolkit SDK 来验证令牌。如果您只有 Web 应用,所有新的身份验证请求都将转移到 Identity Platform,因此您只需要使用 ID 令牌验证方法。
请参阅 Web API 参考文档。
第 2 步:更新 HTML
将初始化代码添加到您的应用:
向应用添加身份验证 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>
从应用中移除 Identity Toolkit SDK。
如果您之前依赖 Identity Toolkit ID 令牌进行会话管理,则必须在客户端进行以下更改:
使用 Identity Platform 成功登录后,通过调用
firebase.auth().currentUser.getToken()
获取 ID 令牌。将 ID 令牌发送到后端服务器,对其进行验证,然后颁发您自己的会话 Cookie。
在执行敏感操作或向服务器发送经过身份验证的编辑请求时,请勿仅依赖会话 Cookie。您需要提供额外的跨站请求伪造 (CSRF) 保护。
如果您的框架未提供 CSRF 保护,一种防止攻击的方法是使用
getToken()
获取已登录用户的 ID 令牌,并将该令牌包含在每个请求中(默认情况下也会发送会话 Cookie)。然后,除了后端框架完成的会话 Cookie 检查之外,您还可以使用 Admin SDK 验证该令牌。这样一来,CSRF 攻击就更难成功,因为 ID 令牌仅使用 Web 存储进行存储,而绝不会存储在 Cookie 中。Identity Toolkit 令牌的有效期为两周。您可以继续发放有效期为两周的令牌,也可以根据应用的安全要求延长或缩短令牌有效期。当用户退出账号时,请清除会话 Cookie。
第 3 步:更新 IDP 重定向网址
对于您支持的每个联合登录提供方,请执行以下操作:
- 点击相应登录服务提供商的名称。
- 复制 OAuth 重定向 URI。
- 在登录提供方的开发者控制台中,更新 OAuth 重定向 URI。
Android
第 1 步:将 Identity Platform 添加到您的 Firebase 应用
打开 Cloud 控制台,然后选择您的 Identity Toolkit 项目。
在“提供商”页面上,点击应用设置详情,选择 Android 标签页,然后点击 在 Firebase 中开始。 在“添加 Firebase”对话框中,提供应用的软件包名称和签名证书指纹,然后点击添加应用。随后,系统会将
google-services.json
配置文件下载到您的计算机。将配置文件复制到 Android 应用模块根目录。此配置文件包含项目和 Google OAuth 客户端信息。
在项目级
build.gradle
文件 (<var>your-project</var>/build.gradle
) 中,在defaultConfig
部分指定应用的软件包名称:defaultConfig { ….. applicationId "com.your-app" }
同样在项目级
build.gradle
文件中,添加一个依赖项以纳入 google-services 插件:buildscript { dependencies { // Add this line classpath 'com.google.gms:google-services:3.0.0' } }
在应用的 App 级
build.gradle
文件 (<var>my-project</var>/<var>app-module</var>/build.gradle
) 中,在 Android Gradle 插件后添加以下行,以启用 google-services 插件:apply plugin: 'com.android.application' // Add this line apply plugin: 'com.google.gms.google-services'
google-services 插件使用
google-services.json
文件来配置您的应用以使用 Firebase。同样是在应用级
build.gradle
文件中,添加 Firebase Authentication 依赖项:compile 'com.google.firebase:firebase-auth:24.0.1' compile 'com.google.android.gms:play-services-auth:21.4.0'
第 2 步:移除 Identity Toolkit SDK
- 从
AndroidManifest.xml
文件中移除 Identity Toolkit 配置。此信息包含在google-service.json
文件中,并由 google-services 插件加载。 - 从应用中移除 Identity Toolkit SDK。
第 3 步:将 FirebaseUI 添加到您的应用
向您的应用添加 FirebaseUI Auth。
在您的应用中,将对 Identity Toolkit SDK 的调用替换为对 FirebaseUI 的调用。
iOS
第 1 步:将 Firebase 添加到您的应用
运行以下命令,将客户端 SDK 添加到您的应用中:
$ cd your-project directory $ pod init $ pod 'Firebase'
打开 Cloud 控制台,然后选择您的 Identity Toolkit 项目。
在“提供商”页面上,点击应用设置详情,选择 iOS 标签页,然后点击 在 Firebase 中开始。在“添加 Firebase”对话框中,提供应用的软件包名称和签名证书指纹,然后点击添加应用。随后,系统会将
google-services.json
配置文件下载到您的计算机。在“添加 Firebase”对话框中,提供应用的软件包 ID 和 App Store ID,然后点击添加应用。随后,系统会将GoogleService-Info.plist
配置文件下载到您的计算机。如果您的项目中有多个软件包 ID,则必须在 Firebase 控制台中关联每个软件包 ID,以便每个软件包 ID 都有自己的GoogleService-Info.plist
文件。将配置文件复制到 Xcode 项目的根目录,并将其添加到所有目标。
第 2 步:移除 Identity Toolkit SDK
- 从应用的 Podfile 中移除
GoogleIdentityToolkit
。 - 运行
pod install
命令。
第 3 步:将 FirebaseUI 添加到您的应用
向您的应用添加 FirebaseUI Auth。
在您的应用中,将对 Identity Toolkit SDK 的调用替换为对 FirebaseUI 的调用。