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

最新版 Google Identity Toolkit 已推出為 Identity PlatformFirebase 驗證。日後 Identity Toolkit 的功能將遭到凍結;所有新功能開發都會透過 Identity Platform 和 Firebase 驗證完成。我們建議身分工具包開發人員只要能實際應用到這些平台即可。

新功能

Identity Platform 已經比 Google Identity Toolkit 具備重要的強化功能:

  • 新版管理控制台

    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 測試

  • 更新使用者介面

    我們已根據 Google 最新的使用者體驗研究,徹底重新建構 UI 流程。這包括密碼復原、帳戶連結、新/現有帳戶的混淆流程,通常需要大量時間來編寫程式碼和偵錯。這項服務整合了 Android 裝置上的密碼專用 Smart Lock,大幅改善參與計畫的應用程式的登入和註冊轉換。此外,您還能根據應用程式的需求,輕鬆修改主題,並開放 AndroidiOS 版本使用,方便自訂內容。

  • 簡化伺服器設定程序

    透過 Identity Toolkit,我們發現許多開發人員選擇不實作電子郵件復原流程,因此使用者忘記密碼時無法進行帳戶救援程序。Identity Platform 可以傳送電子郵件驗證、密碼重設和變更密碼訊息給使用者,也能輕鬆地為使用者自訂這些文字內容。此外,您不再需要託管重新導向和完成密碼變更作業的 UI 小工具

  • 新 SDK

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

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

    使用 Identity Toolkit 時,應用程式會根據 Identity Toolkit 的初始驗證事件建立自己的工作階段狀態。Identity Platform 採用的後端服務,會使用從驗證事件中取得的更新權杖,然後交換用於 Android、iOS 和 JavaScript 的每小時存取權杖。使用者變更密碼後,更新權杖就無法再產生新的存取權杖,因此會停用存取權,直到使用者在裝置上重新驗證為止。

功能差異

Identity Platform 目前未提供部分 Identity Toolkit 功能,其他功能也經過重新設計,運作方式也有所不同。如果這些功能對您的應用程式來說十分重要,您可能選擇不立即遷移。在許多情況下,這些功能可能不適用於您的應用程式,或是提供易於遷移的簡易備用方案。

伺服器端差異

核心身分工具包服務及其基礎 REST API、帳戶驗證邏輯和主要使用者資料庫只進行了小幅更新。但有些功能,以及將 Identity Platform 整合至服務的方式有所變更。

  • 識別資訊提供者

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

  • 伺服器程式庫

    目前,Admin SDK 有適用於 Java、Node.js、Python、Go 和 C# 的情況。

  • 帳戶管理電子郵件

    密碼重設、電子郵件驗證和電子郵件變更訊息都可以由 Firebase 或開發人員自己的郵件伺服器執行。電子郵件範本目前只能透過 UI 自訂,但您可以利用 Admin SDK 進一步自訂。

  • 電子郵件地址變更確認

    當使用者決定變更電子郵件地址時,Identity Toolkit 會傳送電子郵件到新地址,其中含有連結繼續進行電子郵件地址變更流程。

    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 流程都已透過 Client SDK 重新建構,並封裝為登入小工具。這些 SDK 是 iOSAndroid網頁版的開放原始碼 SDK,可讓您以 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 Toolkit 中,當使用者重設密碼、變更電子郵件地址或驗證電子郵件地址時,您需要從 Identity Toolkit 伺服器取得 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 Platform 的情況下,Identity Platform 與 Identity Toolkit 有許多其他差異。

  • 網路工作階段管理

    之前,當使用者透過 Identity Toolkit 小工具完成驗證時,系統會針對用於啟動工作階段的使用者設定 Cookie。這個 Cookie 的生命週期為兩週,可讓使用者透過帳戶管理小工具變更密碼和電子郵件地址。有些網站會使用這個 Cookie 驗證網站上所有其他的網頁要求。其他網站透過其架構的 Cookie 管理系統使用 Cookie 建立自己的 Cookie。

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

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

  • 網頁登入流程

    我們先前會在登入時將使用者重新導向至 accountchooser.com,藉此瞭解使用者要使用的 ID。Identity Platform UI 的流程現在從一系列登入方法開始,包括電子郵件選項,該選項會傳送至網頁版 accountchooser.com,並在 Android 上使用 hintRequest API。此外,使用者介面已不再需要電子郵件地址。如此一來,就能更輕鬆地支援匿名使用者、自訂驗證使用者或供應商的使用者,即使他們不需要電子郵件地址。

  • 帳戶管理小工具

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

  • 登入按鈕/小工具

    我們不再提供登入按鈕和使用者資訊卡等小工具。使用 Firebase Authentication API 非常輕鬆地建構這類憑證。

  • 沒有 signOutUrl

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

  • 沒有 oobActionUrl

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

  • CSS 自訂功能

    UI 小工具使用 Material Design Lite 樣式,能夠動態新增 Material Design 動畫。

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

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

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

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

請參閱 Web API 參考資料

步驟 2:更新 HTML

  1. 在應用程式中新增初始化程式碼:

    1. Cloud 控制台中開啟專案。
    2. providers頁面中,按一下「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. 身分工具包權杖的效期為兩週。建議您繼續核發過去兩週的權杖,或是根據應用程式的安全性需求,延長或縮短權杖的時間。當使用者登出時,請清除工作階段 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」。在「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 服務外掛程式的依附元件:

    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 服務外掛程式會使用 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. 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. 執行下列指令,將用戶端 SDK 新增到您的應用程式:

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

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