Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

實施自定義 App Check 提供程序

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

App Check 內置了對多個提供程序的支持:Apple 平台上的 DeviceCheck 和 App Attest,Android 上的 Play Integrity 和 SafetyNet,以及 web 應用程序中的 reCAPTCHA v3 和 reCAPTCHA Enterprise(概述)。這些是很好理解的提供者,應該可以滿足大多數開發人員的需求。但是,您也可以實現自己的自定義 App Check 提供程序。在以下情況下需要使用自定義提供程序:

  • 您想使用內置提供程序以外的提供程序。

  • 您想以不受支持的方式使用內置提供程序。

  • 您希望使用 Apple、Android 和 Web 以外的平台驗證設備。例如,您可以為桌面操作系統或物聯網設備創建 App Check 提供程序。

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

概述

要實現自定義 App Check 提供程序,您需要一個可以運行 Node.js Firebase Admin SDK的安全後端環境。這可以是 Cloud Functions、 Cloud Run等容器平台或您自己的服務器。

在此環境中,您將提供可訪問網絡的服務,該服務從您的應用程序客戶端接收真實性證明,並且如果真實性證明通過了您的真實性評估,則返回一個 App Check 令牌。您用作真實性證明的特定指標將取決於您使用的第三方提供商,或者您自己發明的指標(如果您正在實施自定義邏輯)。

通常,您將此服務公開為 REST 或 gRPC 端點,但此細節取決於您。

創建令牌獲取端點

  1. 安裝並初始化 Admin SDK

  2. 創建一個可從您的客戶端接收真實性數據的網絡可訪問端點。例如,使用雲函數:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onCall((authenticityData, context) => {
      // ...
    });
    
  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() 。您可以將 TTL 設置為 30 分鐘到 7 天之間的任何值。設置此值時,請注意以下權衡:

    • 安全性:較短的 TTL 可提供更強的安全性,因為它減少了洩露或攔截的令牌可能被攻擊者濫用的窗口。
    • 性能:較短的 TTL 意味著您的應用將更頻繁地執行證明。由於應用程序證明過程每次執行都會增加網絡請求的延遲,因此較短的 TTL 可能會影響應用程序的性能。

    對於大多數應用程序來說,1 小時的默認 TTL 是合理的。

下一步

既然您已經實現了自定義提供程序的服務器端邏輯,請了解如何從您的AppleAndroidWeb客戶端使用它。