導入自訂 App Check 供應商

App Check 內建支援多個供應商:Apple 平台上的 DeviceCheck 和 AppAttest、Android 上的 Play Integrity,以及網頁應用程式中的 reCAPTCHA Enterprise (總覽)。這些都是廣為人知的供應商,應能滿足大多數開發人員的需求。不過,您也可以導入自己的自訂 App Check 供應商。在下列情況下,必須使用自訂供應商:

  • 您想使用內建供應商以外的供應商。

  • 您想以不支援的方式使用內建供應商。

  • 您想使用 Apple、Android 和網頁以外的平台驗證裝置。舉例來說,您可以為桌機作業系統或物聯網裝置建立 App Check 提供者。

  • 您想在任何平台上實作自己的驗證技術。

總覽

如要實作自訂 App Check 提供者,您需要安全的後端環境,才能執行 Node.js Firebase Admin SDK。這可以是 Cloud FunctionsCloud Run 等容器平台,或是您自己的伺服器。

在這個環境中,您將提供可透過網路存取的服務,接收來自應用程式用戶端的真實性證明,並在真實性證明通過真實性評估後,傳回 App Check 權杖。您用來證明真偽的具體指標,取決於您使用的第三方供應商,或是您自行發明的指標 (如果您要實作自訂邏輯)。

通常您會將這項服務公開為 REST 或 gRPC 端點,但這項細節由您決定。

建立權杖取得端點

  1. 安裝並初始化 Admin SDK

  2. 建立可從用戶端接收真偽資料的網路可存取端點。例如使用 Cloud Functions

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. 在端點邏輯中加入評估真偽資料的程式碼。這是自訂 App Check 供應商的核心邏輯,您必須自行編寫。

  4. 如果判斷用戶端為正版,請使用 Admin SDK 鑄造 App Check 權杖,並將權杖和到期時間傳回給用戶端:

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    如果無法驗證用戶端是否為正版,請傳回錯誤 (例如傳回 HTTP 403 錯誤)。

  5. 選用:將 AppCheckTokenOptions 物件傳遞至 createToken(),為自訂供應商核發的 App Check 權杖設定存留時間 (TTL)。您可以將存留時間設為介於 30 分鐘至 7 天之間的任何值。設定這個值時,請注意下列取捨:

    • 安全性:存留時間越短,安全性就越高,因為這樣可縮短攻擊者濫用外洩或遭攔截權杖的時間範圍。
    • 效能:TTL 較短表示應用程式會更頻繁地執行認證。應用程式認證程序每次執行時,都會增加網路要求延遲時間,因此 TTL 較短可能會影響應用程式效能。

    預設存留時間為 1 小時,適用於大多數應用程式。

後續步驟

您已實作自訂供應商的伺服器端邏輯,接下來請參閱如何從 AppleAndroid網頁用戶端使用這項邏輯。