最新版 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 推出
Identity Toolkit 可逐步將身分識別提供者新增至登入系統,方便您實驗對支援要求的影響。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 的呼叫。