最新版 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 包含多項互補功能,可供您混搭使用,滿足自身需求,並提供下列基礎架構:行動裝置數據分析、雲端通訊、即時資料庫、檔案儲存空間、靜態主機代管、遠端設定、行動裝置當機報告和 Android 測試。 
- 更新的 UI - 我們根據 Google 最新的使用者體驗研究,全面重建了 UI 流程。包括密碼救援、帳戶連結、新/現有帳戶消歧流程,這些流程通常需要大量時間進行編碼和偵錯。這項功能整合了 Android 上的密碼專用 Smart Lock,大幅提升了參與應用程式的登入和註冊轉換率。此外,您也可以輕鬆修改主題,配合應用程式風格。為了提供最大的自訂彈性,Android 和 iOS 版本已開放原始碼。 
- 簡化伺服器設定 - 我們發現許多開發人員選擇不實作電子郵件復原流程,導致使用者忘記密碼時無法復原帳戶。Identity Platform 可以傳送電子郵件驗證、密碼重設和密碼變更訊息給使用者,而且您可以輕鬆自訂這些訊息的文字。此外,您也不再需要代管 UI 小工具,即可代管重新導向並完成密碼變更作業。 
- 新版 SDK - 現在,您可以使用各個用戶端程式庫 (Android、iOS、網頁),以原生方式存取 Identity Toolkit 的所有伺服器 API。開發人員可以登入及註冊新舊使用者、存取使用者屬性、連結、更新及刪除帳戶、重設密碼等,不必受限於固定 UI。您也可以選擇以這個 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# 的管理 SDK。 
- 帳戶管理電子郵件 - 密碼重設、電子郵件驗證和電子郵件變更訊息可以由 Firebase 或開發人員自己的郵件伺服器執行。目前,電子郵件範本只能在使用者介面進行有限的自訂,但可使用 Admin SDK 進一步自訂 
- 確認變更電子郵件地址 - 在 Identity Toolkit 中,如果使用者決定變更電子郵件地址,系統會傳送電子郵件至新地址,內含可繼續變更電子郵件地址流程的連結。 - Firebase 會傳送撤銷電子郵件至舊電子郵件地址,當中包含可還原變更的連結,藉此確認電子郵件地址變更。 
- IDP 推出 - 身分識別工具組可逐步將身分識別提供者新增至登入系統,方便您實驗這項功能對支援要求的影響。Firebase Authentication 已移除這項功能。 
用戶端差異
在 Identity Platform 中,Google Identity Toolkit 提供的功能會分成兩個元件:
- 用戶端和伺服器 SDK - 在 Identity Platform 中,Identity Toolkit REST API 提供的功能已封裝至適用於 Android、iOS 和 JavaScript 的用戶端 SDK。您可以使用 SDK 登入及註冊使用者、存取使用者設定檔資訊、連結、更新及刪除帳戶,以及重設密碼,不必透過 REST 呼叫與後端服務通訊。 
- UI 小工具 - 所有用於管理登入、註冊、密碼復原和帳戶連結的 UI 流程,都已使用 Client SDK 重建,並封裝為登入小工具。這些 SDK 適用於 iOS、Android 和 Web,且為開放原始碼,可讓您完全自訂流程,這是 Identity Toolkit 無法做到的。 
其他差異包括:
- 工作階段和遷移 - 由於 Identity Toolkit 和 Identity Platform 管理工作階段的方式不同,升級 SDK 後,使用者現有的工作階段會終止,必須重新登入。 
事前準備
如要從 Identity Toolkit 遷移至 Identity Platform,您必須:
- 開啟 Cloud 控制台,然後選取 Identity Toolkit 專案。 
- 前往 Marketplace 瀏覽「Identity Platform」,然後選取「Enable 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、網頁。
伺服器和 JavaScript
重要異動
Identity Platform 的網頁實作方式與 Identity Toolkit 相比,還有許多其他差異。
- 網頁工作階段管理 - 先前,使用者透過身分識別工具包小工具完成驗證後,系統會為使用者設定 Cookie,用於啟動工作階段。這個 Cookie 的效期為兩週,可讓使用者透過帳戶管理小工具變更密碼和電子郵件地址。部分網站會使用這個 Cookie 驗證網站上的所有其他網頁要求。其他網站則透過架構的 Cookie 管理系統,使用該 Cookie 建立自己的 Cookie。 - Identity Platform 用戶端 SDK 現在會管理 ID 權杖,並與 Identity Platform 的後端合作,確保工作階段保持最新狀態。後端會在發生重大帳戶變更 (例如使用者密碼變更) 時,使工作階段過期。ID 權杖不會自動在網頁用戶端中設為 Cookie,且效期只有一小時。除非您只想要一小時的工作階段,否則不適合使用 ID 權杖做為 Cookie,驗證所有網頁要求。您需要設定接聽程式,以便在使用者登入時取得 ID 權杖、驗證權杖,並透過架構的 Cookie 管理系統建立自己的 Cookie。 - 您必須根據應用程式的安全需求,設定 Cookie 的工作階段存留時間。 
- 網頁登入流程 - 先前,系統會將使用者重新導向至 - accountchooser.com,瞭解使用者想使用哪個 ID。Identity Platform 使用者介面的流程現在會從登入方法清單開始,包括電子郵件選項 (會前往網頁的- accountchooser.com,並在 Android 上使用 hintRequest API)。此外,使用者介面也不再需要電子郵件地址。 這樣一來,您就能更輕鬆地支援匿名使用者、自訂驗證使用者,或來自不需要電子郵件地址的供應商的使用者。
- 帳戶管理小工具 - 這個小工具提供使用者介面,方便使用者變更電子郵件地址、變更密碼,或取消帳戶與身分識別提供者的連結。目前仍在開發階段。 
- 登入按鈕/小工具 - 系統不再提供登入按鈕和使用者資訊卡等小工具。使用 Firebase 驗證 API 即可輕鬆建構這些功能。 
- 沒有 signOutUrl - 您需要呼叫 - firebase.auth.signOut()並處理回呼。
- 沒有 oobActionUrl - 現在電子郵件傳送作業由 Identity Platform 處理,並在 Firebase 控制台中設定。 
- 自訂 CSS - 這個 UI 小工具使用 Material Design Lite 樣式,可動態新增 Material Design 動畫。 
步驟 1:變更伺服器程式碼
- 如果伺服器依賴 Identity Toolkit 權杖 (效期兩週) 管理網路使用者工作階段,則必須將伺服器轉換為使用自己的工作階段 Cookie。 - 實作端點,用於驗證 ID 權杖,並為使用者設定工作階段 Cookie。用戶端應用程式會將 Firebase ID 權杖傳送至這個端點。
- 如果傳入的要求包含您自己的工作階段 Cookie,您可以將使用者視為已通過驗證。否則,請將要求視為未經驗證。
- 如不希望任何使用者失去現有的登入工作階段,請等待兩週,讓所有 Identity Toolkit 權杖過期,或為您的網路應用程式執行雙重權杖驗證,如步驟 3 所述。
 
- 接下來,由於 ID 權杖與 Identity Toolkit 權杖不同,您必須更新權杖驗證邏輯。在伺服器上安裝 Admin SDK;如果使用的語言不支援 Admin SDK,請下載適用於您環境的 JWT 權杖驗證程式庫,並正確驗證權杖。 
- 首次進行上述更新時,您可能仍有依附於 Identity Toolkit 權杖的程式碼路徑。如果您有 iOS 或 Android 應用程式,使用者必須升級至新版應用程式,才能使用新的程式碼路徑。如果不想強制使用者更新應用程式,可以新增額外的伺服器驗證邏輯,檢查權杖並判斷是否需要使用 Firebase SDK 或 Identity Toolkit SDK 驗證權杖。如果您只有網路應用程式,所有新的驗證要求都會轉移至 Identity Platform,因此您只需要使用 ID 權杖驗證方法。 
請參閱 Web API 參考資料。
步驟 2:更新 HTML
- 在應用程式中加入初始化程式碼: - 在 Cloud 控制台中開啟專案。
- 在「供應商」頁面中,按一下「應用程式設定詳細資料」。系統會顯示初始化 Identity Platform 的程式碼片段。
- 將初始化程式碼片段複製並貼到網頁中。
 
- 在應用程式中新增 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>
- 從應用程式中移除 Identity Toolkit SDK。 
- 如果您依賴 Identity Toolkit ID 權杖進行工作階段管理,請務必在用戶端進行下列變更: - 使用 Identity Platform 成功登入後,請呼叫 - firebase.auth().currentUser.getToken()取得 ID 權杖。
- 將 ID 權杖傳送至後端伺服器、驗證權杖,然後發行您自己的工作階段 Cookie。 - 執行敏感作業或傳送已驗證的編輯要求至伺服器時,請勿只依賴工作階段 Cookie。您需要提供額外的跨網站偽造要求 (CSRF) 防護。 - 如果您的架構未提供 CSRF 保護措施,其中一種防範攻擊的方法是使用 - getToken()取得已登入使用者的 ID 權杖,並在每項要求中加入該權杖 (系統也會根據預設傳送工作階段 Cookie)。然後,您可以使用 Admin SDK 驗證該權杖,並檢查工作階段 Cookie,後端架構會完成這項作業。這樣一來,CSRF 攻擊就更難得逞,因為 ID 權杖只會透過網路儲存空間儲存,絕不會儲存在 Cookie 中。
- Identity Toolkit 權杖的有效期限為兩週。您可以繼續發行效期兩週的權杖,也可以根據應用程式的安全需求延長或縮短效期。使用者登出時,請清除工作階段 Cookie。 
 
步驟 3:更新 IdP 重新導向網址
- 在 Cloud 控制台中,開啟「Providers」(供應者) 區段。 
- 針對您支援的每個聯盟登入供應商,請執行下列操作: - 按一下登入供應商的名稱。
- 複製 OAuth 重新導向 URI。
- 在登入供應商的開發人員控制台中,更新 OAuth 重新導向 URI。
 
Android
步驟 1:透過 Firebase 將 Identity Platform 新增至應用程式
- 開啟 Cloud Console,然後選取 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' } }
- 在應用程式層級的 - 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 驗證依附元件:- 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 Console,然後選取 Identity Toolkit 專案。 
- 在「供應商」頁面中,按一下「應用程式設定詳細資料」,選取「iOS」分頁標籤,然後按一下「在 Firebase 中開始使用」。在「新增 Firebase」對話方塊中,提供應用程式的套件名稱和簽署憑證指紋,然後按一下「新增應用程式」。接著,系統會將 - google-services.json設定檔下載到您的電腦。在「新增 Firebase」對話方塊中,提供應用程式的套件組合 ID 和 App Store ID,然後按一下「新增應用程式」。接著,系統會將- GoogleService-Info.plist設定檔下載到您的電腦。如果專案中有多個套件組合 ID,則必須在 Firebase 控制台中連結每個套件組合 ID,才能取得專屬的- GoogleService-Info.plist檔案。
- 將設定檔複製到 Xcode 專案的根層級,並加入所有目標。 
步驟 2:移除 Identity Toolkit SDK
- 從應用程式的 Podfile 中移除 GoogleIdentityToolkit。
- 請執行 pod install指令。
步驟 3:將 FirebaseUI 新增至應用程式
- 在應用程式中新增 FirebaseUI Auth。 
- 在應用程式中,將對 Identity Toolkit SDK 的呼叫替換為對 FirebaseUI 的呼叫。