最新版的 Google Identity Toolkit 已推出,名稱為 Firebase 驗證。日後,Identity Toolkit 的功能開發作業將凍結,所有新功能開發作業都會在 Firebase 驗證中進行。我們建議 Identity Toolkit 開發人員盡快將應用程式遷移至 Firebase 驗證,不過 Identity Toolkit 仍可繼續運作,且不會在未另行公告的情況下遭淘汰。
新功能
Firebase 驗證功能已針對 Google Identity Toolkit 提供一些重大功能強化:
存取所有 Firebase 功能
Firebase 行動平台可協助您快速開發高品質的應用程式、擴大使用者數量及提高獲利。Firebase 由互補功能組成,您可以視需求混合搭配使用,其中包括下列功能的基礎架構:行動分析、雲端通訊、即時資料庫、檔案儲存空間、靜態代管服務、遠端設定、行動當機回報和 Android 測試。
更新的 UI
我們已根據 Google 最新的使用者體驗研究,全面重建 UI 流程。這包括密碼復原、帳戶連結,以及新/現有帳戶的不明確流程,這些流程通常需要花費大量時間進行程式碼編寫和偵錯。這項功能會在 Android 上整合密碼專用 Smart Lock,大幅提升參與 應用程式的登入和註冊轉換率。它也支援輕鬆修改主題,以配合您的應用程式。為提供最佳自訂選項,Android 和 iOS 版本已開放原始碼。
簡化伺服器設定
我們已簡化開發人員使用 Firebase 驗證的程序。我們發現,許多開發人員選擇不導入電子郵件復原流程,導致使用者忘記密碼時無法復原帳戶。Firebase 驗證可向使用者傳送電子郵件驗證、密碼重設和密碼變更訊息,而且您可以輕鬆為使用者自訂文字。此外,您也不再需要代管 UI 小工具,以便代管重新導向並完成密碼變更作業。
新版管理控制台
Firebase 提供新的開發人員控制台,您可以在「驗證」部分查看、修改及刪除使用者。這有助於偵錯登入和註冊流程。您也可以透過控制台設定驗證方法,並自訂電子郵件範本。
新 SDK
所有 Identity Toolkit 的伺服器 API 現在都能與各用戶端程式庫 (Android、iOS、網頁) 原生搭配使用。開發人員可以登入及註冊新舊使用者、存取使用者資源、連結、更新及刪除帳戶、重設密碼等,而無須綁定固定的 UI。如有需要,您可以手動建構自己的完整登入流程和體驗,並以此 API 為基礎。
行動應用程式的工作階段管理
使用 Identity Toolkit 時,應用程式會根據 Identity Toolkit 的初始驗證事件建立自己的工作階段狀態。Firebase Auth 會使用後端服務,從驗證事件中取得更新權杖,然後將其換成 Android、iOS 和 JavaScript 的 1 小時存取權杖。使用者變更密碼後,重新整理權杖將無法再產生新的存取權權杖,因此在使用者重新驗證該裝置之前,存取權將會停用。
匿名和 GitHub 驗證
Firebase 驗證支援兩種新的驗證類型:GitHub 和匿名。匿名登入功能可用於建立專屬使用者 ID,而無須要求使用者完成任何登入或註冊程序。您現在可以使用匿名使用者,像是使用一般使用者一樣,發出經過驗證的 API 呼叫。當使用者決定註冊帳戶時,系統會保留所有活動,並使用相同的使用者 ID。這類情況包括伺服器端購物車,或任何您想在將使用者送至註冊流程前先與他們互動的應用程式。
功能差異
部分 Identity Toolkit 功能目前無法在 Firebase 驗證中使用,其他功能則已重新設計,並採用不同的運作方式。如果這些功能對您的應用程式至關重要,您可以選擇暫時不遷移。在許多情況下,這些功能可能對您的應用程式不重要,或者可能有簡單的備用方案,可讓您繼續遷移作業。
伺服器端差異
核心身分識別工具服務及其基礎 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 讓使用者登入及註冊;存取使用者個人資料資訊;連結、更新及刪除帳戶;以及使用用戶端 SDK 重設密碼,而非透過 REST 呼叫與後端服務通訊。
FirebaseUI Auth
我們已使用 Firebase 驗證 SDK 重建所有管理登入、註冊、密碼救援和帳戶連結的 UI 流程。這些工具可做為 iOS 和 Android 的開放原始碼 SDK 使用,讓您以 Identity Toolkit 無法提供的方式,完全自訂流程。
其他差異包括:
工作階段和遷移
由於 Identity Toolkit 和 Firebase 驗證服務管理工作階段的方式不同,因此升級 SDK 後,使用者的現有工作階段會終止,使用者必須重新登入。
事前準備
您必須先完成下列步驟,才能從 Identity Toolkit 遷移至 Firebase 驗證:
開啟 Firebase 控制台,按一下「Import Google Project」,然後選取 Identity Toolkit 專案。
依序點選 settings >「權限」,即可開啟「IAM & Admin」(IAM 與管理員) 頁面。
開啟頁面。您可以在此處查看先前為 Identity Toolkit 設定的服務帳戶。
在服務帳戶旁邊,依序按一下 more_vert >「建立金鑰」。接著,在「Create private key」對話方塊中,將「Key type」設為「JSON」,然後按一下「Create」。系統會為您下載包含服務帳戶憑證的 JSON 檔案。您需要這項資訊才能在下一個步驟中初始化 SDK。
返回 Firebase 控制台。在「驗證」部分,開啟「電子郵件範本」頁面。在這個頁面中,自訂應用程式的電子郵件範本。
在 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 驗證 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 權杖與身分識別工具組權杖不同,您必須更新權杖驗證邏輯。將 Firebase Server SDK 安裝到伺服器;如果您使用的語言不受 Firebase Server SDK 支援,請為您的環境下載 JWT 權杖驗證程式庫,並正確驗證權杖。
首次進行上述更新時,您可能仍有依賴 Identity Toolkit 權杖的程式碼路徑。如果您有 iOS 或 Android 應用程式,使用者必須升級至新版應用程式,才能使用新程式碼路徑。如果您不想強制使用者更新應用程式,可以新增其他伺服器驗證邏輯,檢查權杖,並判斷是否需要使用 Firebase SDK 或 Identity Toolkit SDK 來驗證權杖。如果您只有一個網頁應用程式,所有新的驗證要求都會轉移至 Firebase,因此您只需要使用 Firebase 權杖驗證方法。
步驟 2:更新 HTML
在應用程式中加入 Firebase 初始化程式碼:
- 在 Firebase 控制台中開啟專案。
- 在「總覽」頁面中,依序按一下「新增應用程式」和「將 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 控制台中,開啟「驗證」部分,然後按一下「登入方法」分頁。
針對您支援的每個聯合登入提供者,執行下列操作:
- 按一下登入服務供應商的名稱。
- 複製 OAuth 重新導向 URI。
- 在登入服務供應商的開發人員控制台中,更新 OAuth 重新導向 URI。
Android
步驟 1:將 Firebase 新增至應用程式
開啟 Firebase 控制台,然後選取您已匯入的 Identity Toolkit 專案。
在「總覽」頁面中,按一下「新增應用程式」,然後點選「將 Firebase 新增至您的 Android 應用程式」。在「新增 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' } }
在應用程式的應用程式層級
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:23.1.0' compile 'com.google.android.gms:play-services-auth:21.3.0'
步驟 2:移除 Identity Toolkit SDK
- 從
AndroidManifest.xml
檔案中移除 Identity Toolkit 設定。這項資訊會包含在google-service.json
檔案中,並由 Google 服務外掛程式載入。 - 從應用程式中移除 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 專案。
在「總覽」頁面中,按一下「Add App」,然後點選「Add Firebase to your iOS app」。在「Add Firebase」對話方塊中,提供應用程式的套件 ID 和 App Store 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 的呼叫。