從 Google Identity Toolkit 遷移至 Firebase 驗證

最新版 Google Identity Toolkit 已發布為 Firebase 驗證。日後,Identity Toolkit 的功能將會停止運作,且所有新功能開發作業都會透過 Firebase 驗證完成。我們鼓勵 Identity Toolkit 開發人員於應用程式有實際可行的情況下,盡快改用 Firebase 驗證;不過,Identity Toolkit 會繼續運作,且不會有進一步公告而淘汰。

新功能

與 Google Identity Toolkit 相比,Firebase 驗證已提供一些重要的強化功能:

  • 存取 Firebase 的所有功能

    Firebase 行動平台有助於快速開發高品質應用程式、擴展使用者數量及提高獲利。Firebase 由多項額外功能組成,您可以視需求搭配使用,搭配使用多種功能,包括行動裝置分析雲端通訊即時資料庫檔案儲存空間靜態託管遠端設定、行動當機回報和 Android 測試等基礎架構。

  • 更新的 UI

    我們根據 Google 最新的使用者體驗研究,徹底重新建構了 UI 流程,包括密碼復原、帳戶連結、全新/現有帳戶區別流程,通常需要大量時間編寫程式碼和偵錯。這項服務在 Android 裝置上整合密碼專用 Smart Lock,大幅改善加入計畫的應用程式的登入和註冊轉換成效。此程式庫也支援根據應用程式的需求,輕鬆修改主題。此外,我們也提供開放原始碼的 AndroidiOS 版本,是最容易自訂的依據。

  • 簡化伺服器設定程序

    我們讓開發人員能夠更輕鬆地使用 Firebase 驗證功能。我們發現許多開發人員選擇不採用電子郵件復原流程,因此使用者在忘記密碼時,無法復原帳戶。Firebase 驗證可以向使用者傳送電子郵件驗證、密碼重設和變更密碼訊息,您可以輕鬆為使用者自訂這段文字。此外,不再需要代管重新導向和完成密碼變更作業的 UI 小工具

  • 新版管理控制台

    Firebase 提供新的開發人員控制台,而「驗證」部分可讓您查看、修改及刪除使用者。這很適合用來對登入和註冊流程進行偵錯。控制台也可讓您設定驗證方法及自訂電子郵件範本。

  • 新版 SDK

    現在,所有 Identity Toolkit 的伺服器 API 皆內建於各個用戶端程式庫 (Android、iOS、網頁)。開發人員可以登入及註冊新舊使用者,也可以存取使用者屬性、連結、更新及刪除帳戶,以及重設密碼等,不必連結至固定的使用者介面。如有需要,您可以手動建構自己的整個登入流程,並使用這個 API 體驗。

  • 行動應用程式的工作階段管理

    使用 Identity Toolkit 時,應用程式會根據 Identity Toolkit 的初始驗證事件自行建立工作階段狀態。Firebase 驗證使用的後端服務會從驗證事件中擷取更新權杖,並針對 Android、iOS 和 JavaScript 交換更新權杖,以取得一小時長的存取權杖。使用者變更密碼後,更新權杖將無法再產生新的存取權杖,因此,在使用者在裝置上重新驗證前,系統會停用存取權。

  • 匿名和 GitHub 驗證

    Firebase 驗證支援兩種新的驗證類型:GitHub 與匿名。匿名登入可用來建立專屬的使用者 ID,無需使用者進行任何登入或註冊。現在,您可以採用匿名使用者,執行經過驗證的 API 呼叫,操作方法與一般使用者相同。使用者決定註冊帳戶時,所有活動都會保留相同的使用者 ID。這種做法很適合在伺服器端購物車或任何應用程式互動時,先讓使用者透過註冊流程吸引他們。

功能差異

部分 Identity Toolkit 功能目前不適用於 Firebase 驗證,其他功能則經過重新設計,運作方式則有所不同。如果這些功能對應用程式很重要,那麼您可以選擇不要立即遷移。在許多情況下,這些功能對您的應用程式而言並不重要,或者提供簡單的備用機制,讓您繼續執行遷移作業。

伺服器端差異

Core Identity Toolkit 服務及其基礎 REST API、帳戶驗證邏輯和主要使用者資料庫只經過小幅更新。不過,某些功能和 Firebase 驗證整合至服務的方式已經改變。

  • 識別資訊提供者

    不支援 PayPal 和 AOL。擁有這些 IDP 帳戶的使用者仍可透過密碼復原流程登入您的應用程式,並設定帳戶密碼。

  • 伺服器程式庫

    目前,Firebase Admin SDK 適用於 Java、Node.js、Python、Go 和 C#。

  • 帳戶管理電子郵件

    Firebase 或開發人員自己的郵件伺服器可以執行密碼重設、電子郵件驗證和電子郵件變更訊息。目前 Firebase 電子郵件範本僅提供部分自訂功能。

  • 電子郵件地址變更確認

    在 Identity Toolkit 中,當使用者決定變更電子郵件地址時,系統會傳送一封電子郵件到新的地址,該地址可透過連結繼續進行電子郵件地址變更流程。

    Firebase 會將撤銷電子郵件傳送至舊電子郵件地址,並附上還原變更的連結,藉此確認電子郵件地址變更。

  • IDP 推出

    Identity Toolkit 能夠逐步將識別資訊提供者新增至您的登入系統,因此您可以嘗試這個做法,測試對支援要求所造成的影響。Firebase 驗證已移除這項功能。

用戶端差異

在 Firebase 中,Google Identity Toolkit 提供的功能會分為兩個部分:

  • Firebase 驗證 SDK

    在 Firebase 驗證中,Identity Toolkit 的 REST API 所提供的功能已封裝在用戶端 SDK 中,適用於 Android、iOS 和 JavaScript。您可以使用 SDK 登入及註冊使用者,也可以存取使用者個人資料、連結、更新及刪除帳戶,以及重設密碼,而不需要透過 REST 呼叫與後端服務進行通訊。

  • FirebaseUI 驗證

    所有用於管理登入、註冊、密碼復原和帳戶連結的 UI 流程,都已使用 Frebase 驗證 SDK 重新建構。這些程式庫以 iOS 和 Android 適用的開放原始碼 SDK 的形式提供,可讓您完整自訂流程,並運用 Identity Toolkit 無法做到的方式。

其他差異包括:

  • 工作階段和遷移

    由於在 Identity Toolkit 和 Firebase 驗證中管理工作階段的方式不同,因此使用者的現有工作階段會在升級 SDK 後終止,而您的使用者將必須重新登入。

事前準備

從 Identity Toolkit 遷移至 Firebase 驗證之前,您必須

  1. 開啟 Firebase 控制台,按一下「Import Google Project」(匯入 Google 專案),然後選取您的 Identity Toolkit 專案。

  2. 按一下 >「權限」,開啟「IAM 與管理」頁面。

  3. 開啟頁面。您可以在這裡看到之前為 Identity Toolkit 設定的服務帳戶

  4. 在服務帳戶旁邊,依序按一下 >「Create key」(建立金鑰)。接著,在「Create private key」對話方塊中,將「Key type」設為「JSON」,然後按一下「Create」。系統隨即會下載一個內含服務帳戶憑證的 JSON 檔案。您將在下一個步驟中初始化 SDK。

  5. 返回 Firebase 控制台。 在「驗證」部分中,開啟「電子郵件範本」頁面。在這個頁面中,自訂應用程式的電子郵件範本。

    在 Identity Toolkit 中,當使用者重設密碼、變更了電子郵件地址和驗證電子郵件地址時,您需要從 Identity Toolkit 伺服器取得 OOB 代碼,然後透過電子郵件將代碼傳送給使用者。Firebase 會根據您設定的範本傳送電子郵件,您無須採取其他動作。

  6. 選用:如需在伺服器上存取 Firebase 服務,請安裝 Firebase SDK。

    1. 您可以使用 npm 安裝 Firebase Node.js 模組:

      $ npm init
      $ npm install --save firebase-admin
      
    2. 在程式碼中,您可以使用以下方式存取 Firebase:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

接著,請完成應用程式平台的遷移步驟:AndroidiOS網站

伺服器和 JavaScript

重要異動

在網站導入 Firebase 與 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 即可輕鬆建構這類 API。

  • 沒有 signOutUrl

    您需要呼叫 firebase.auth.signOut() 並處理回呼。

  • 沒有 oobActionUrl

    電子郵件傳送功能現在是由 Firebase 處理,並在 Firebase 控制台中設定。

  • CSS 自訂功能

    FirebaseUI 採用 Material Design Lite 樣式,可動態加入質感設計動畫。

步驟 1:變更伺服器程式碼

  1. 如果您的伺服器仰賴 Identity Toolkit 權杖 (效期兩週) 來管理網路使用者工作階段,您必須將伺服器轉換到自己的工作階段 Cookie。

    1. 實作端點來驗證 Firebase ID 權杖,以及為使用者設定工作階段 Cookie。用戶端應用程式將 Firebase ID 權杖傳送至這個端點。
    2. 如果傳入要求包含您自己的工作階段 Cookie,您可以將使用者視為已通過驗證。否則,請將要求視為未驗證。
    3. 如果您不希望任何使用者失去現有的登入工作階段,則應等待所有身分工具包權杖都過期兩週,或按照下方步驟 3 所述,為網頁應用程式進行雙重權杖驗證。
  2. 接下來,由於 Firebase 權杖與 Identity Toolkit 符記不同,因此您必須更新權杖驗證邏輯。在伺服器中安裝 Firebase Server SDK;如果您使用 Firebase Server SDK 不支援的語言,請下載適用於您環境的 JWT 權杖驗證程式庫,並適當驗證權杖

  3. 首次更新上述項目時,您可能仍有程式碼路徑仰賴 Identity Toolkit 權杖。如果您有 iOS 或 Android 應用程式,使用者必須升級至新版應用程式,新的程式碼路徑才能生效。如果您不想強制使用者更新應用程式,可以新增其他伺服器驗證邏輯,以便檢查權杖並判斷是否需要使用 Firebase SDK 或 Identity Toolkit SDK 來驗證權杖。如果您只有一個網頁應用程式,所有新的驗證要求都會轉移至 Firebase,因此您只需使用 Firebase 權杖驗證方法。

請參閱 Firebase Web API 參考資料

步驟 2:更新 HTML

  1. 將 Firebase 初始化程式碼加入應用程式:

    1. Firebase 控制台開啟專案。
    2. 在「總覽」頁面中,按一下「Add App」,然後點選「Add Firebase to your web app」。系統隨即會顯示初始化 Firebase 的程式碼片段。
    3. 複製初始化程式碼片段並貼到網頁中。
  2. FirebaseUI 驗證新增至應用程式:

    <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>
    
  3. 從應用程式中移除 Identity Toolkit SDK。

  4. 如果您使用 Identity Toolkit ID 權杖來管理工作階段,則必須在用戶端進行下列變更:

    1. 成功登入 Firebase 後,請呼叫 firebase.auth().currentUser.getToken() 來取得 Firebase ID 權杖。

    2. 將 Firebase ID 權杖傳送至後端伺服器並加以驗證,然後發出自己的工作階段 Cookie。

      執行敏感作業或將經過驗證的編輯要求傳送至伺服器時,請勿完全依賴工作階段 Cookie。您需要提供額外的跨網站偽造要求 (CSRF) 防護。

      如果您的架構未提供 CSRF 保護,其中一種預防攻擊的方式是使用 getToken() 取得已登入使用者的 Firebase ID 權杖,並加入每個要求中的權杖 (根據預設也會傳送工作階段 Cookie)。接著,除了工作階段 Cookie 檢查 (您的後端架構已完成),您還可以使用 Firebase 伺服器 SDK 驗證該權杖。這會讓 CSRF 攻擊更難成功,因為 Firebase ID 憑證只會透過網路儲存空間儲存,絕不會儲存在 Cookie 中。

    3. Identity Toolkit 權杖的有效期限為兩週。您可以選擇繼續核發持續兩週的權杖,或根據應用程式的安全性要求延長或縮短權杖。使用者登出時,請清除工作階段 Cookie。

步驟 3:更新 IdP 重新導向網址

  1. 在 Firebase 控制台中開啟「Authentication」區段,然後點選「Sign-in Method」分頁標籤。

  2. 針對您支援的每個聯合登入供應商,按照下列步驟操作:

    1. 按一下登入服務供應商名稱。
    2. 複製 OAuth 重新導向 URI。
    3. 在登入供應商的開發人員控制台中,更新 OAuth 重新導向 URI。

Android

步驟 1:將 Firebase 新增至應用程式

  1. 開啟 Firebase 主控台,然後選取已匯入的 Identity Toolkit 專案。

  2. 在「總覽」頁面中,按一下「新增應用程式」,然後點選「將 Firebase 新增到 Android 應用程式」。在「Add Firebase」對話方塊中,提供應用程式的套件名稱和簽署憑證指紋,然後按一下「Add App」。接著,google-services.json 設定檔就會下載到您的電腦。

  3. 將設定檔複製到 Android 應用程式模組根目錄。這個設定檔包含專案和 Google OAuth 用戶端資訊。

  4. 在專案層級 build.gradle 檔案 (<var>your-project</var>/build.gradle) 的 defaultConfig 區段中,指定應用程式的套件名稱:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. 此外,請在專案層級的 build.gradle 檔案中新增依附元件,以納入 google-services 外掛程式:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. 在應用程式的應用程式層級 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 服務外掛程式會使用 google-services.json 檔案將您的應用程式設定為使用 Firebase。

  7. 請在應用程式層級的 build.gradle 檔案中,新增 Firebase 驗證依附元件:

    compile 'com.google.firebase:firebase-auth:22.3.1'
    compile 'com.google.android.gms:play-services-auth:21.0.0'
    

步驟 2:移除 Identity Toolkit SDK

  1. AndroidManifest.xml 檔案中移除 Identity Toolkit 設定。這項資訊會包含在 google-service.json 檔案中,並由 Google 服務外掛程式載入。
  2. 從應用程式中移除 Identity Toolkit SDK。

步驟 3:在應用程式中加入 FirebaseUI

  1. FirebaseUI 驗證新增至應用程式。

  2. 在應用程式中,將 Identity Toolkit SDK 的呼叫替換為對 FirebaseUI 的呼叫。

iOS

步驟 1:將 Firebase 新增至應用程式

  1. 執行下列指令,將 Firebase SDK 新增至應用程式:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. 開啟 Firebase 主控台,然後選取已匯入的 Identity Toolkit 專案。

  3. 在「總覽」頁面中,按一下「新增應用程式」,然後點選「將 Firebase 新增到您的 iOS 應用程式」。在「Add Firebase」對話方塊中,提供應用程式的軟體包 ID 和 App Store ID,然後按一下「Add App」GoogleService-Info.plist 設定檔會下載至您的電腦。如果專案中有多個軟體包 ID,則必須在 Firebase 控制台連結每個軟體包 ID,以便擁有自己的 GoogleService-Info.plist 檔案。

  4. 將設定檔複製到 Xcode 專案的根目錄,並將該檔案新增到所有目標中。

步驟 2:移除 Identity Toolkit SDK

  1. 從應用程式的 Podfile 中移除 GoogleIdentityToolkit
  2. 請執行 pod install 指令。

步驟 3:在應用程式中加入 FirebaseUI

  1. FirebaseUI 驗證新增至應用程式。

  2. 在應用程式中,將 Identity Toolkit SDK 的呼叫替換為對 FirebaseUI 的呼叫。