最新版 Google Identity Toolkit 已發布為 Firebase 驗證。日後,Identity Toolkit 的功能開發作業將會凍結,所有新功能開發作業都會在 Firebase 驗證 上完成。我們鼓勵 Identity Toolkit 開發人員盡快將應用程式遷移至 Firebase 驗證,但 Identity Toolkit 仍可繼續使用,且在另行公告前不會淘汰。
新功能
Firebase 驗證已比 Google Identity Toolkit 增強一些重要功能:
可存取所有 Firebase 資源
Firebase 行動平台可協助您快速開發高品質的應用程式、擴大使用者族群及提高獲利。Firebase 包含多項互補功能,您可以視需求搭配使用,包括:行動數據分析、雲端通訊、即時資料庫、檔案儲存空間、靜態託管、遠端設定、行動當機回報和 Android 測試。
更新 UI
我們根據 Google 最新的使用者體驗研究,完全重建了使用者介面流程。包括密碼救援、帳戶連結、新/現有帳戶消歧流程,這些流程通常需要花費大量時間編寫程式碼和偵錯。這項 API 整合了 Android 上的密碼專用 Smart Lock,大幅提升參與應用程式的登入和註冊轉換率。此外,您也可以輕鬆修改主題,配合應用程式風格。為了提供最大程度的自訂彈性,Android 和 iOS 版本均已開放原始碼。
簡化伺服器設定
我們已簡化 Firebase 驗證的使用方式。我們發現,許多開發人員在使用 Identity Toolkit 時,選擇不導入電子郵件復原流程,導致使用者忘記密碼時無法復原帳戶。Firebase 驗證可傳送電子郵件驗證、重設密碼和變更密碼訊息給使用者,且訊息文字可輕鬆自訂。此外,您也不再需要託管 UI 小工具,來託管重新導向和完成密碼變更作業。
新版管理控制台
Firebase 提供新的開發人員控制台,您可以在「Authentication」部分查看、修改及刪除使用者。這對偵錯登入和註冊流程很有幫助。您也可以透過控制台設定驗證方式及自訂電子郵件範本。
新 SDK
Identity Toolkit 的所有伺服器 API 現在都可與我們的每個用戶端程式庫 (Android、iOS、網頁) 原生搭配使用。開發人員可以登入及註冊新舊使用者、存取使用者屬性、連結、更新及刪除帳戶、重設密碼等,不受固定使用者介面的限制。您也可以根據這項 API,手動建構完整的登入流程和體驗。
行動應用程式的工作階段管理
使用 Identity Toolkit 時,應用程式會根據 Identity Toolkit 的初始驗證事件,建立自己的工作階段狀態。Firebase Auth 使用後端服務,從驗證事件中取得更新權杖,並將其交換為 Android、iOS 和 JavaScript 的一小時存取權杖。使用者變更密碼後,更新權杖將無法再產生新的存取權杖,因此在使用者重新驗證裝置之前,系統會停用存取權。
匿名和 GitHub 驗證
Firebase 驗證支援兩種新的驗證類型:GitHub 和匿名。匿名登入可用於建立不重複的使用者 ID,使用者不必經過任何登入或註冊程序。現在,您可以像一般使用者一樣,使用匿名使用者發出經過驗證的 API 呼叫。當使用者決定註冊帳戶時,所有活動都會保留在同一個使用者 ID 下。這項功能非常適合用於伺服器端購物車,或任何想在使用者進入註冊流程前,先與他們互動的應用程式。
功能差異
部分 Identity Toolkit 功能目前無法在 Firebase Authentication 中使用,其他功能則經過重新設計,運作方式有所不同。如果這些功能對您的應用程式很重要,您可能會選擇不立即遷移。在許多情況下,這些功能可能對您的應用程式不重要,或者可能有簡單的備用方案,可讓您繼續進行遷移。
伺服器端差異
核心 Identity Toolkit 服務及其基礎 REST API、帳戶驗證邏輯和主要使用者資料庫僅經過小幅更新。不過,部分功能和將 Firebase 驗證整合至服務的方式有所變更。
識別資訊提供者
不支援 Paypal 和 AOL。擁有這些 IdP 帳戶的使用者仍可透過密碼復原流程登入應用程式,並為帳戶設定密碼。
伺服器程式庫
目前,Java、Node.js、Python、Go 和 C# 都有 Firebase Admin SDK。
帳戶管理電子郵件
重設密碼、電子郵件驗證和電子郵件變更訊息可由 Firebase 或開發人員自己的郵件伺服器執行。目前 Firebase 電子郵件範本僅提供有限的自訂功能。
電子郵件地址變更確認
在 Identity Toolkit 中,當使用者決定變更電子郵件地址時,系統會傳送電子郵件至新地址,其中包含繼續變更電子郵件地址流程的連結。
Firebase 會傳送撤銷電子郵件至舊的電子郵件地址,確認電子郵件地址變更,並提供還原變更的連結。
IDP 推出
Identity Toolkit 可讓您逐步將識別資訊提供者新增至登入系統,以便測試對支援要求的影響。Firebase 驗證已移除這項功能。
用戶端差異
在 Firebase 中,Google Identity Toolkit 提供的功能分為兩個部分:
Firebase 驗證 SDK
在 Firebase 驗證中,Identity Toolkit REST API 提供的功能已封裝在適用於 Android、iOS 和 JavaScript 的用戶端 SDK 中。您可以使用 SDK 讓使用者登入及註冊、存取使用者個人資料、連結、更新及刪除帳戶,以及重設密碼,而不必透過 REST 呼叫與後端服務通訊。
FirebaseUI Auth
所有管理登入、註冊、密碼救援和帳戶連結的 UI 流程,都已使用 Firebase Authentication SDK 重建。這些 SDK 適用於 iOS 和 Android,並以開放原始碼形式提供,可讓您以 Identity Toolkit 無法做到的方式,完全自訂流程。
其他差異包括:
課程和遷移
由於 Identity Toolkit 和 Firebase Authentication 管理工作階段的方式不同,升級 SDK 後,使用者的現有工作階段會終止,使用者必須重新登入。
事前準備
從 Identity Toolkit 遷移至 Firebase 驗證 前,您必須
開啟 Firebase 控制台,按一下「Import Google Project」(匯入 Google 專案),然後選取 Identity Toolkit 專案。
依序點選「settings」>「Permissions」(權限),開啟「IAM & Admin」(IAM 與管理) 頁面。
開啟頁面。您可以在這裡看到先前為 Identity Toolkit 設定的服務帳戶。
依序點選服務帳戶旁的 more_vert >「Create key」(建立金鑰)。接著,在「Create private key」(建立私密金鑰) 對話方塊中,將「Key type」(金鑰類型) 設為「JSON」,然後按一下「Create」(建立)。系統會下載含有服務帳戶憑證的 JSON 檔案。您在下一個步驟中初始化 SDK 時,會需要用到這項資訊。
返回 Firebase 控制台。在「Auth」部分,開啟「Email Templates」頁面。在這個頁面中,您可以自訂應用程式的電子郵件範本。
在 Identity Toolkit 中,當使用者重設密碼、變更電子郵件地址和驗證電子郵件地址時,您必須從 Identity Toolkit 伺服器取得 OOB 程式碼,然後透過電子郵件將程式碼傳送給使用者。Firebase 會根據您設定的範本傳送電子郵件,您不需採取其他動作。
選用:如需在伺服器上存取 Firebase 服務,請安裝 Firebase SDK。
您可以使用
npm安裝 Firebase Node.js 模組:$ 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、網頁) 的遷移步驟操作。
伺服器和 JavaScript
重要異動
Firebase 的網頁實作與 Identity Toolkit 還有許多其他差異。
網頁工作階段管理
以往,當使用者透過 Identity Toolkit 小工具進行驗證時,系統會為使用者設定 Cookie,用於啟動工作階段。這個 Cookie 的效期為兩週,可讓使用者透過帳戶管理小工具變更密碼和電子郵件地址。部分網站會使用這個 Cookie 驗證網站上的所有其他網頁要求。其他網站則透過架構的 Cookie 管理系統,使用該 Cookie 建立自己的 Cookie。
Firebase 用戶端 SDK 現在會管理 Firebase ID 權杖,並與 Firebase 驗證的後端搭配運作,確保工作階段保持最新狀態。當帳戶發生重要變更 (例如使用者密碼變更) 時,後端會終止工作階段。Firebase ID 權杖不會自動設為網路用戶端上的 Cookie,且生命週期只有一小時。除非您希望工作階段只有一小時,否則 Firebase ID 權杖不適合用來驗證所有網頁要求的 Cookie。您必須設定事件監聽器,在使用者登入時取得 Firebase ID 權杖、驗證權杖,並透過架構的 Cookie 管理系統建立自己的 Cookie。
您需要根據應用程式的安全性需求,設定 Cookie 的工作階段生命週期。
網頁登入流程
先前,使用者在啟動登入程序時,會重新導向至
accountchooser.com,以瞭解使用者想使用的 ID。Firebase Auth UI 的流程現在會從登入方式清單開始,包括網頁版accountchooser.com的電子郵件選項,以及 Android 版的 hintRequest API。此外,Firebase UI 也不再需要電子郵件地址。這樣一來,就能更輕鬆地支援匿名使用者、自訂驗證使用者,或來自不需要電子郵件地址的提供者的使用者。帳戶管理小工具
這個小工具提供使用者介面,方便使用者變更電子郵件地址、變更密碼,或取消帳戶與識別資訊提供者的連結。目前仍在開發中。
登入按鈕/小工具
我們不再提供登入按鈕和使用者資訊卡等小工具。使用 Firebase Authentication API 即可輕鬆建構。
沒有 signOutUrl
您必須呼叫
firebase.auth.signOut()並處理回呼。沒有 oobActionUrl
電子郵件傳送作業現在由 Firebase 處理,並在 Firebase 控制台中設定。
CSS 自訂
FirebaseUI 採用 Material Design Lite 樣式,可動態新增 Material Design 動畫。
步驟 1:變更伺服器程式碼
如果伺服器仰賴 Identity Toolkit 權杖 (效期兩週) 管理網頁使用者工作階段,則須改用伺服器自己的工作階段 Cookie。
- 實作端點,用於驗證 Firebase ID 權杖,並為使用者設定工作階段 Cookie。用戶端應用程式會將 Firebase ID 權杖傳送至這個端點。
- 如果傳入的要求包含您的工作階段 Cookie,即可視為使用者已通過驗證。否則,請將要求視為未經驗證。
- 如果您不希望任何使用者失去現有的登入工作階段,請等待兩週,讓所有 Identity Toolkit 權杖過期,或按照下方步驟 3 的說明,為網頁應用程式執行雙重權杖驗證。
接下來,由於 Firebase 權杖與 Identity Toolkit 權杖不同,您必須更新權杖驗證邏輯。在伺服器上安裝 Firebase Server SDK;如果使用的語言不受 Firebase Server SDK 支援,請下載適用於您環境的 JWT 權杖驗證程式庫,並正確驗證權杖。
首次進行上述更新時,可能仍有程式碼路徑依賴 Identity Toolkit 權杖。如果您有 iOS 或 Android 應用程式,使用者必須升級至新版應用程式,新的程式碼路徑才能運作。如果不想強制使用者更新應用程式,可以新增額外的伺服器驗證邏輯,檢查權杖並判斷是否需要使用 Firebase SDK 或 Identity Toolkit SDK 驗證權杖。如果您只有網頁應用程式,所有新的驗證要求都會轉移至 Firebase,因此您只需要使用 Firebase 權杖驗證方法。
步驟 2:更新 HTML
在應用程式中加入 Firebase 初始化程式碼:
- 在 Firebase 控制台中開啟專案。
- 在「Overview」(總覽) 頁面中,依序點選「Add App」(新增應用程式) 和「Add Firebase to your web app」(將 Firebase 新增至網頁應用程式)。系統會顯示初始化 Firebase 的程式碼片段。
- 複製初始化程式碼片段,並貼到網頁中。
將 FirebaseUI Auth 新增至應用程式:
<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 權杖進行工作階段管理,則必須在用戶端進行下列變更:
成功登入 Firebase 後,請呼叫
firebase.auth().currentUser.getToken()取得 Firebase ID 權杖。將 Firebase ID 權杖傳送至後端伺服器、進行驗證,並核發自己的工作階段 Cookie。
執行機密作業或向伺服器傳送經過驗證的編輯要求時,請勿僅依賴工作階段 Cookie。您必須提供額外的跨網站偽造要求 (CSRF) 保護。
如果您的架構不提供 CSRF 防護,其中一種防範攻擊的方法,就是使用
getToken()取得已登入使用者的 Firebase ID 權杖,並在每項要求中加入該權杖 (工作階段 Cookie 預設也會傳送)。接著,您可以使用 Firebase 伺服器 SDK 驗證該權杖,並檢查工作階段 Cookie (由後端架構完成)。由於 Firebase ID 權杖只會儲存在網頁儲存空間,不會儲存在 Cookie 中,因此 CSRF 攻擊更難成功。Identity Toolkit 權杖的效期為兩週。您可以繼續核發效期為兩週的權杖,也可以根據應用程式的安全性需求,延長或縮短效期。使用者登出時,請清除工作階段 Cookie。
步驟 3:更新 IDP 重新導向網址
在 Firebase 控制台中,開啟「Authentication」部分,然後按一下「登入方式」分頁標籤。
針對您支援的每個聯合登入供應商,執行下列操作:
- 按一下登入供應商的名稱。
- 複製 OAuth 重新導向 URI。
- 在登入服務供應商的開發人員控制台中,更新 OAuth 重新導向 URI。
Android
步驟 1:將 Firebase 新增至應用程式
開啟 Firebase 控制台,然後選取已匯入的 Identity Toolkit 專案。
在「Overview」(總覽) 頁面中,依序點選「Add App」(新增應用程式) 和「Add Firebase to your Android app」(將 Firebase 新增至 Android 應用程式)。在「Add Firebase」(新增 Firebase) 對話方塊中,提供應用程式的套件名稱和簽署憑證指紋,然後按一下「Add App」(新增應用程式)。
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' } }在應用程式層級的
build.gradle檔案 (<var>my-project</var>/<var>app-module</var>/build.gradle) 底部,新增下列程式碼,啟用 google-services 外掛程式:// Add to the bottom of the file apply plugin: 'com.google.gms.google-services'google-services 外掛程式會使用
google-services.json檔案,將應用程式設為使用 Firebase。同樣在應用程式層級的
build.gradle檔案中,新增 Firebase 驗證依附元件:compile 'com.google.firebase:firebase-auth:25.0.0' compile 'com.google.android.gms:play-services-auth:22.0.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 新增至應用程式
執行下列指令,將 Firebase SDK 新增至應用程式:
$ cd your-project directory $ pod init $ pod 'Firebase'開啟 Firebase 控制台,然後選取已匯入的 Identity Toolkit 專案。
在「Overview」(總覽) 頁面中,依序點選「Add App」(新增應用程式) 和「Add Firebase to your iOS app」(將 Firebase 新增至 iOS 應用程式)。在「Add Firebase」(新增 Firebase) 對話方塊中,提供應用程式的軟體包 ID 和應用程式商店 ID,然後點選「Add App」(新增應用程式)。
GoogleService-Info.plist設定檔隨即會下載到您的電腦。如果專案有多個軟體包 ID,則每個軟體包 ID 都必須在 Firebase 控制台中連結,才能擁有專屬的GoogleService-Info.plist檔案。將設定檔複製到 Xcode 專案的根目錄,並新增至所有目標。
步驟 2:移除 Identity Toolkit SDK
- 從應用程式的 Podfile 中移除
GoogleIdentityToolkit。 - 請執行
pod install指令。
步驟 3:將 FirebaseUI 新增至應用程式
在應用程式中新增 FirebaseUI Auth。
在應用程式中,將對 Identity Toolkit SDK 的呼叫替換為對 FirebaseUI 的呼叫。