從 Google Identity Toolkit 遷移至 Google Cloud's Identity Platform

最新版的 Google Identity Toolkit 已經以 Identity PlatformFirebase 驗證發布。我們日後將凍結 Identity Toolkit 的功能,所有新功能開發作業都將在 Identity Platform 和 Firebase 驗證上完成。我們建議 Identity Toolkit 開發人員在能實際運用應用程式時,盡快遷移至這些平台。

新功能

與 Google Identity Toolkit 相比,Identity Platform 已有顯著強化的功能:

  • 新版管理控制台

    Identity Platform 提供新版開發人員控制台,可讓您查看、修改及刪除使用者;這有助於針對登入和註冊流程進行偵錯。控制台也可讓您設定驗證方法和自訂電子郵件範本。

  • 新的驗證方式

    Identity Platform 支援 SAML 和 OIDC 等企業聯盟標準,可讓您調度軟體式服務 (SaaS) 應用程式和服務的資源。Identity Platform 也支援 GitHub、Microsoft、Yahoo 等供應商。您可以使用匿名登入功能建立不重複的使用者 ID,無需讓使用者完成任何登入或註冊程序;如此一來,您就可以像一般使用者一樣,發出經過驗證的 API 呼叫。如果使用者決定註冊帳戶,所有活動都會以相同的使用者 ID 保留。對於伺服器端購物車或其他應用程式等情境,在您透過註冊流程向使用者傳送使用者前,這項功能非常實用。

  • 透過服務水準協議和 Cloud 支援服務,安心調度資源

    Identity Platform 建構在值得信賴的 Google 基礎架構上,並提供 Google Cloud 的服務水準協議和支援。也就是說,您可以放心地擴充服務,並由 Google 提供所需的彈性、可用性和擴充性。

  • 使用所有 Firebase 功能

    Firebase 行動平台有助於快速開發優質應用程式、擴展使用者族群及提高收益。Firebase 是由多項輔助功能組成,您可以視需求搭配使用,並提供下列基礎架構:行動分析雲端通訊即時資料庫檔案儲存空間靜態託管遠端設定、行動裝置當機報表和 Android 測試{/15。

  • 更新版 UI

    我們已根據 Google 最新的使用者體驗研究,徹底重建了 UI 流程。這包括密碼復原、帳戶連結、新建/現有帳戶區分流程,通常需要花費大量時間來編寫程式碼及偵錯。這個 API 整合了 Android 上的密碼專用 Smart Lock,大幅改善加入應用程式的登入和註冊轉換成效。此外還支援簡易的主題修改功能,以配合您的應用程式。此外,為了盡可能自訂可自訂性,AndroidiOS 版本也採用開放原始碼。

  • 簡化伺服器設定

    我們發現許多開發人員都選擇不實作電子郵件復原流程,因此如果使用者忘記密碼,就無法復原帳戶。Identity Platform 可向使用者傳送電子郵件驗證、密碼重設以及變更密碼訊息,並且可以為使用者輕鬆自訂文字。此外,您不再需要代管 UI 小工具來託管重新導向,並完成密碼變更作業。

  • 全新 SDK

    現在,每個用戶端程式庫 (Android、iOS、網頁) 皆以原生方式提供 Identity Toolkit 的所有伺服器 API。開發人員可以登入及註冊新舊使用者、存取使用者屬性、連結、更新及刪除帳戶、重設密碼等等,而不必連結至固定的 UI。您也可以根據這個 API 為基礎,手動建構自己的整個登入流程和體驗。

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

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

功能差異

Identity Starter 的部分功能目前不適用於 Identity Platform,但其他功能則經過重新設計,運作方式有所不同。如果這些功能對您的應用程式非常重要,建議您選擇不要立即遷移。在許多情況下,這些功能對您的應用程式可能並不重要,或是可能會有簡易的備用方案,讓您開始進行遷移作業。

伺服器端差異

核心 Identity Toolkit 服務具備基礎 REST API、帳戶驗證邏輯和主要使用者資料庫,只有微幅更新。不過,將 Identity Platform 整合至服務的部分功能,以及將 Identity Platform 整合至服務的方式已改變。

  • 識別資訊提供者

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

  • 伺服器程式庫

    目前可以使用 Java、Node.js、Python、Go 和 C# 等多種 Admin SDK

  • 帳戶管理電子郵件

    Firebase 或開發人員的郵件伺服器可以執行密碼重設、電子郵件驗證和電子郵件變更等作業。目前電子郵件範本只能在使用者介面中提供有限的自訂選項,但可以使用管理員 SDK 進一步自訂

  • 電子郵件地址變更確認

    在 Identity 工具包中,當使用者決定變更電子郵件地址時,系統會傳送電子郵件到新地址,其中包含連結以繼續進行電子郵件地址變更流程。

    Firebase 會傳送撤銷電子郵件至舊電子郵件地址,其中包含還原變更的連結,藉此確認電子郵件地址變更。

  • IDP 推出作業

    Identity Toolkit 可以逐步將識別資訊提供者新增至登入系統,以便您進行實驗,瞭解這項動作對支援要求造成的影響。Firebase 驗證已移除這項功能。

用戶端差異

在 Identity Platform 中,Google Identity Toolkit 提供的功能會分成兩個元件:

  • 用戶端和伺服器 SDK

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

  • UI 小工具

    所有管理登入、註冊、密碼復原和帳戶連結的 UI 流程都已使用用戶端 SDK 重新建構,並封裝為登入小工具。這些套件都是以開放原始碼 SDK 的形式提供,且適用於 iOSAndroid網頁,可讓您以 Identity Toolkit 無法實現的方式完全自訂流程。

其他差異包括:

  • 工作階段和遷移

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

事前準備

您必須先完成下列事項,才能從 Identity Toolkit 遷移至 Identity Platform:

  1. 開啟 Cloud 控制台,然後選取您的 Identity Toolkit 專案。

  2. 從 Marketplace 中前往 Identity Platform,然後選取 [啟用 Identity Platform]

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

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

  5. 返回 Cloud 控制台。 在「Providers」(供應商) 區段中,開啟「Email/Password」(電子郵件/密碼) 登入方式中的「Email Templates」(電子郵件範本) 頁面。您可以接著自訂應用程式的範本。

    在 Identity 工具包中,當使用者重設密碼、變更電子郵件地址或驗證電子郵件地址時,您必須從 Identity 工具包伺服器取得 OOB 程式碼,然後透過電子郵件將代碼傳送給使用者。Identity Platform 會根據您設定的範本傳送電子郵件,您無須採取其他行動。

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

    1. 您可以使用 npm 安裝 Node.js Admin SDK:

      $ 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 導入 Identity Platform 的過程中,另有一些其他差異。

  • 網路工作階段管理

    先前使用者透過身分識別工具包小工具進行驗證時,系統會為使用者設定 Cookie,並用於啟動工作階段。這個 Cookie 的生命週期為兩週,可讓使用者透過帳戶管理小工具變更密碼和電子郵件地址。有些網站會使用這個 Cookie 來驗證網站上的所有其他網頁要求。其他網站會透過自家架構的 Cookie 管理系統使用 Cookie 建立自己的 Cookie。

    Identity Platform 用戶端 SDK 現在會管理 ID 權杖,並與 Identity Platform 的後端搭配運作,讓工作階段維持在最新狀態。發生重要帳戶變更 (例如使用者密碼變更) 時,後端會過期工作階段。ID 權杖不會自動將網路用戶端的 Cookie 設為 Cookie,且生命週期只有一小時。除非您希望只用一小時的工作階段,否則不適合將 ID 權杖用作 Cookie 來驗證所有的網頁要求。您需要改為設定事件監聽器,以便在使用者登入時、取得 ID 權杖驗證權杖,以及透過架構的 Cookie 管理系統建立自己的 Cookie。

    您必須根據應用程式的安全性需求,設定 Cookie 的工作階段生命週期。

  • 網路登入流程

    先前登入時,系統會將使用者重新導向至 accountchooser.com,藉此瞭解使用者想使用的 ID。Identity Platform UI 的流程現在以登入方法清單開始,包括前往 accountchooser.com 網頁版的電子郵件選項,並在 Android 上使用 hintRequest API。此外,使用者介面不再需要使用電子郵件地址。這樣就能更輕鬆地支援匿名使用者、自訂驗證使用者,或不需要電子郵件地址的供應商使用者。

  • 帳戶管理小工具

    這個小工具可讓使用者變更電子郵件地址、變更密碼,或取消帳戶與識別資訊提供者的連結。這項功能目前處於開發階段。

  • 登入按鈕/小工具

    我們不再提供登入按鈕和使用者資訊卡等小工具。您可以使用 Firebase Authentication API 輕鬆建構這些 API。

  • 沒有 signOutUrl

    您必須呼叫 firebase.auth.signOut() 並處理回呼。

  • 沒有 oobActionUrl

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

  • CSS 自訂

    UI 小工具會使用 Material Design Lite 樣式,以動態方式加入質感設計動畫。

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

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

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

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

請參閱網路 API 參考資料

步驟 2:更新 HTML

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

    1. Cloud 控制台中開啟專案。
    2. 提供者頁面中,按一下「Application Setup Details」。畫面會顯示初始化 Identity Platform 的程式碼片段。
    3. 複製初始化程式碼片段並貼到您的網頁中。
  2. 在應用程式中新增驗證小工具

    <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. 成功使用 Identity Platform 登入後,請呼叫 firebase.auth().currentUser.getToken() 以取得 ID 權杖。

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

      在執行敏感作業或將經驗證的編輯要求傳送至伺服器時,請勿只依賴工作階段 Cookie。在此情況下,您必須提供額外的跨網站要求偽造 (CSRF) 保護措施。

      如果您的架構未提供 CSRF 防護,防範攻擊的其中一種方法是使用 getToken() 為已登入的使用者取得 ID 權杖,並在每項要求中加入符記 (根據預設,系統也會傳送工作階段 Cookie)。接著,除了後端架構完成的工作階段 Cookie 檢查之外,您也會使用 Admin SDK 驗證該權杖。這讓 CSRF 攻擊的執行難度會提高,因為 ID 權杖只會使用網路儲存空間進行儲存,而且不會儲存在 Cookie 中。

    3. Identity Toolkit 權杖的有效期限為兩週。建議您繼續核發過去兩週的權杖,或是根據應用程式的安全性需求,延長或縮短憑證時間。當使用者登出時,請清除工作階段 Cookie。

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

  1. Cloud 控制台中,開啟「Providers」(供應商) 區段。

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

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

Android

步驟 1:使用 Firebase 在應用程式中新增 Identity Platform

  1. 開啟 Cloud 控制台,然後選取您的 Identity Toolkit 專案。

  2. 在「Providers」(供應商) 頁面上,按一下「Application setup details」(應用程式設定詳細資料),選取「Android」分頁標籤,然後按一下「Get Started in Firebase」(在 Firebase 中開始使用)。在「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) 中,在 Android Gradle 外掛程式後方加入下列程式碼,即可啟用 Google 服務外掛程式:

    apply plugin: 'com.android.application'
    // Add this line
    apply plugin: 'com.google.gms.google-services'
    

    google-services 外掛程式會使用 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-services 外掛程式載入。
  2. 從應用程式中移除 Identity Toolkit SDK。

步驟 3:將 FirebaseUI 新增至應用程式

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

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

iOS

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

  1. 執行下列指令,將用戶端 SDK 新增至您的應用程式:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. 開啟 Cloud 控制台,然後選取您的 Identity Toolkit 專案。

  3. 在「Providers」(供應商) 頁面上,按一下「Application setup details」(應用程式設定詳細資料),然後選取「iOS」(iOS) 分頁標籤,然後按一下「Get Started in Firebase」(在 Firebase 中開始使用)。在「Add Firebase」對話方塊中,提供應用程式的套件名稱和簽署憑證指紋,然後按一下「Add App」。接著,google-services.json 設定檔便會下載到您的電腦。在「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 的呼叫。