從 Google Identity Toolkit 遷移至 Firebase 驗證

最新版 Google Identity Toolkit Firebase 驗證。 日後,Identity Toolkit 的功能將凍結,所有新功能 這項功能會透過 Firebase 驗證進行。建議你 Identity Toolkit 開發人員可盡快改用 Firebase 驗證功能 是否適合用於應用程式不過 Identity Toolkit 且會在未進一步公告的情況下淘汰。

新功能

Firebase 驗證功能已有許多強化的功能 Google Identity Toolkit:

  • 可存取所有 Firebase 功能

    Firebase 行動平台可協助您快速開發高品質的應用程式 拓展使用者族群 同時賺取更多收益Firebase 是由 來搭配各種需求,搭配使用 包括下列基礎架構: 行動分析雲端通訊 即時資料庫 檔案儲存空間靜態託管 遠端設定、 行動裝置當機回報和 Android 測試

  • 更新使用者介面

    我們已根據 Google 最新的使用者體驗,徹底重新建構 UI 流程 研究。這包括密碼救援、帳戶連結、新客戶/現有帳戶 往往需要大量時間編寫程式碼, 偵錯。整合密碼專用 Smart Lock 在 Android 上,這將大幅提升登入和註冊轉換率 參與計畫的應用程式。 這個程式庫也支援簡單的主題修改程序,以符合應用程式 最大可自訂性,也就是 AndroidiOS 都已開放原始碼

  • 簡化伺服器設定程序

    我們簡化了開發人員使用 Firebase 驗證的方式,取代為 我們發現許多開發人員選擇 導致使用者無法自行復原電子郵件 帳戶。Firebase 驗證功能 傳送電子郵件驗證、密碼重設及變更密碼訊息給 也能輕鬆自訂使用者和文字 讓使用者享有低延遲和高可用性此外,您不再需要代管 用於代管重新導向和代管重新導向的使用者介面小工具 完成密碼變更作業。

  • 新版管理控制台

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

  • 新 SDK

    您現在可以透過原生方式取得 Identity Toolkit 的所有伺服器 API 用戶端程式庫 (Android、iOS、網路)。開發人員將可簽署 登入 應用程式,以及註冊新舊使用者、使用使用者屬性、連結、更新與 刪除帳戶、重設密碼等等。 您也可以視需要手動建立專屬的整個登入流程, 導入這個 API

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

    有了 Identity Toolkit,應用程式會根據 的初始驗證事件Firebase 驗證採用 採用更新權杖的後端服務,從驗證作業中移除 事件;交換後可用於交換一小時的存取權杖,以供 Android、iOS 及 JavaScript。使用者變更密碼後,重新整理權杖將不會 即可產生新的存取權杖 系統會停用存取權,直到 使用者在裝置上重新驗證

  • 匿名和 GitHub 驗證

    Firebase 驗證功能支援兩種新的驗證類型:GitHub 和 匿名的資料。匿名登入可用於在沒有使用者 ID 的情況下建立不重複的使用者 ID 要求使用者完成任何登入或註冊流程。內建 就能進行通過驗證的 API 呼叫 與一般使用者聯繫使用者決定註冊帳戶時, 活動仍會保留相同的使用者 ID。這很適合用於下列情況 例如伺服器端購物車,或是您想互動的應用程式 使用者必須先完成註冊流程

功能差異

Firebase 目前未提供部分 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 已封裝在 Android、iOS 和 iOS 適用的用戶端 SDK 中 JavaScript。您可以使用 SDK 登入及註冊使用者。存取權使用者 個人資訊;連結、更新及刪除帳戶;以及重設密碼 使用用戶端 SDK,而不是透過 REST 呼叫。

  • FirebaseUI 驗證

    提供所有 UI 流程,讓您管理登入、註冊、密碼復原與 已使用 Frebase Authentication SDK 重建帳戶連結。 我們提供適用於 iOS 和 Android 的開放原始碼 SDK,協助您 在 Identity Toolkit 中,完全自訂流程。

其他差異包括:

  • 工作階段和遷移

    因為工作階段在 Identity Toolkit 和 Firebase 中管理的方式不同 驗證系統就會在以下時間點終止現有的工作階段: 升級 SDK,使用者必須重新登入。

事前準備

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

  1. 開啟 Firebase 控制台,按一下 匯入 Google 專案,然後選取 Identity Toolkit 專案。

  2. 按一下 >所需權限即可開啟 IAM 與管理頁面。

  3. 開啟頁面。這裡顯示的服務帳戶 先前為 Identity Toolkit 設定

  4. 點選服務帳戶旁邊的 >建立金鑰。接著, 「Create private key」(建立私密金鑰) 對話方塊,將金鑰類型設為「JSON」,然後按一下 建立。包含服務帳戶憑證的 JSON 檔案如下: 。在下一個步驟中,您會需要用到這個程式碼初始化 SDK。

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

    在 Identity Toolkit 中,使用者重設密碼、變更電子郵件地址和 已驗證電子郵件地址,你必須從 ,然後透過電子郵件將代碼傳送給使用者。 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

重要異動

在 透過 Identity Toolkit 取得 Firebase。

  • 網路工作階段管理

    過去,使用者以 Identity Toolkit 小工具通過驗證時 系統為用於啟動工作階段的使用者設定 Cookie。 這個 Cookie 的效期為兩週,可供使用者 帳戶管理小工具即可變更密碼和電子郵件地址。只有部分通知 網站使用這個 Cookie 驗證網站上所有其他網頁要求。 其他網站透過 Cookie 自行使用 Cookie 建立自己的 Cookie 管理架構的 Cookie 管理系統

    Firebase 用戶端 SDK 現在管理 Firebase ID 權杖 ,並與 Firebase 驗證的後端搭配使用,讓工作階段保持最新狀態。 後端會在帳戶有重大變更 (例如使用者) 變更時失效 密碼變更)。Firebase ID 權杖不會自動 設為網路用戶端的 Cookie,而且效期只有一小時。除非您 只想要一小時的工作階段,Firebase ID 權杖就不適合 驗證所有網頁要求不過,您將 需要設定事件監聽器 在使用者登入時 取得 Firebase ID 權杖 驗證權杖,然後建立 透過您架構的 Cookie 管理系統取得 Cookie。

    您必須根據 滿足應用程式的安全防護需求

  • 網頁登入流程

    系統過去會在使用者登入時,將他們重新導向至 accountchooser.com 因此想瞭解使用者要使用的 IDFirebase 驗證 UI 流程現在從登入方法清單 (包括電子郵件) 開始 這個選項會前往 accountchooser.com 網頁版,並使用 開啟 hintRequest API Android。此外,Firebase 已不再需要電子郵件地址 第一種是使用無代碼解決方案 AutoML 透過使用者介面建立機器學習模型這樣就能更輕鬆地支援匿名使用者或自訂驗證使用者 或服務供應商的使用者,不需要提供電子郵件地址。

  • 帳戶管理小工具

    這個小工具提供使用者介面,可讓使用者變更電子郵件地址、將變更地址 或將帳戶與識別資訊提供者取消連結。目前時間: 仍在開發階段。

  • 登入按鈕/小工具

    我們不再提供登入按鈕和使用者資訊卡等小工具。他們 也能使用 Firebase Authentication API 輕鬆建構驗證應用程式。

  • 沒有 signOutUrl

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

  • 沒有 oobActionUrl

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

  • CSS 自訂功能

    FirebaseUI 使用 Material Design Lite 樣式, 以動態方式新增 Material Design 動畫

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

  1. 如果您的伺服器必須使用 Identity Toolkit 權杖 (效期兩週) 才能 管理網路使用者工作階段,您需要將伺服器轉換為 工作階段 Cookie

    1. 導入端點以驗證 Firebase ID 權杖 並設定使用者的工作階段 Cookie用戶端應用程式會將 傳送至這個端點的 Firebase ID 權杖。
    2. 如果傳入要求內含您自己的工作階段 Cookie,您可以 視為使用者已通過驗證否則,請將要求視為 未經驗證。
    3. 如果您不希望任何使用者失去目前登入的帳戶 工作階段時,所有 Identity Toolkit 權杖都應等候兩週 失效,或為 網頁應用程式執行雙重權杖驗證 。
  2. 接下來,因為 Firebase 權杖與 Identity Toolkit 不同 符記,就必須更新符記驗證邏輯。在伺服器上安裝 Firebase Server SDK。或者 Firebase Server SDK 不支援的語言,請下載 JWT 權杖驗證程式庫 並正確驗證權杖

  3. 首次執行上述更新時,您的程式碼路徑可能仍會保留 都必須仰賴 Identity Toolkit 權杖如果你有 iOS 或 Android 應用程式 使用者必須升級至新版應用程式 新的程式碼路徑不強制使用者更新 應用程式,您可以新增更多伺服器驗證邏輯,以便檢查 並決定是否需要使用 Firebase SDK 使用 Identity Toolkit SDK 驗證權杖。如果只有網站 所有新的驗證要求都會轉移到 因此你只需使用 Firebase 權杖 驗證方法。

請參閱 Firebase Web API 參考資料

步驟 2:更新 HTML

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

    1. Firebase 控制台開啟專案。
    2. 在「總覽」頁面中,依序按一下「新增應用程式」將 Firebase 新增至您的 網頁應用程式。系統會顯示可初始化 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 ID 權杖: 正在撥打 firebase.auth().currentUser.getToken()

    2. 將 Firebase ID 權杖傳送至後端伺服器、進行驗證並核發 您自己的工作階段 Cookie

      執行敏感時,請勿僅仰賴工作階段 Cookie 或傳送經過驗證的編輯要求至您的伺服器。個人中心 必須提供額外的跨網站偽造要求 (CSRF) 以及防護

      如果您的架構無法提供 CSRF 保護,其中一種方式 攻擊方法就是為已登入的使用者取得 Firebase ID 權杖 呼叫 getToken(),並為每個要求加入符記 (工作階段) Cookie)。接著 使用 Firebase 伺服器 SDK 和工作階段 Cookie 檢查 您的後端架構已完成同時減少 代表 CSRF 攻擊成功,因為 Firebase ID 權杖只會透過 且絕對不會儲存在 Cookie 中

    3. 身分工具包權杖的效期為兩週。建議您 繼續核發過去兩週的憑證 根據應用程式的安全性需求決定時間長度 使用者登出時,清除工作階段 Cookie。

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

  1. 在 Firebase 控制台中開啟「驗證」專區,然後按一下 分頁。

  2. 針對您支援的每個聯合登入供應商,執行下列操作:

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

Android

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

  1. 開啟 Firebase 控制台 選取先前已匯入的 Identity Toolkit 專案。

  2. 在「總覽」頁面上,按一下「新增應用程式」,然後點選「將 Firebase 新增至」 Android 應用程式。在「Add Firebase」對話方塊中,提供應用程式的套件 名稱和簽署憑證指紋,然後按一下「新增應用程式」。 系統會將 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 服務外掛程式。

    // 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:23.0.0'
    compile 'com.google.android.gms:play-services-auth:21.2.0'
    

步驟 2:移除 Identity Toolkit SDK

  1. 將 Identity Toolkit 設定從 AndroidManifest.xml 中移除 檔案。這項資訊包含在 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 應用程式。在「新增 Firebase」對話方塊中,提供應用程式的軟體包 ID,並 App Store ID,然後點選「新增應用程式」。 系統會將 GoogleService-Info.plist 設定檔下載到 電腦。如果專案中有多個軟體包 ID,則每個軟體包 ID 必須在 Firebase 控制台中連線 GoogleService-Info.plist 檔案。

  4. 將設定檔複製到 Xcode 專案的根目錄,然後新增至 所有指定目標。

步驟 2:移除 Identity Toolkit SDK

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

步驟 3:在應用程式中新增 FirebaseUI

  1. 新增 FirebaseUI 驗證 導入您的應用程式

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