Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

使用 Web 應用程序上的自定義提供程序啟用應用程序檢查

本頁說明如何啟用一個Web應用程序應用來查看,使用您的自定義應用程序檢查供應商。啟用 App Check 有助於確保只有您的應用可以訪問您項目的 Firebase 資源。

如果你想使用應用程序檢查與默認reCAPTCHA的供應商,請參閱啟用Web應用程序App中檢查與驗證碼

在你開始之前

1. 將 App Check 庫添加到您的應用中

添加火力地堡到您的Web應用程序,如果你還沒有準備好。請務必導入 App Check 庫。

2. 創建 App Check 提供程序對象

為您的自定義提供程序創建一個 App Check 提供程序對象。這個對象必須有一個getToken()方法,該方法收集的任何信息您的自定義應用程序檢查提供商要求的證件的真實性,並將其發送給您的令牌獲取的服務換取一個App檢查令牌。該應用程序檢查SDK手柄令牌緩存,所以總是得到一個新的令牌你的實現getToken()

網頁版 9

const { CustomProvider } = require("firebase/app-check");

const appCheckCustomProvider = new CustomProvider({
  getToken: () => {
    return new Promise((resolve, _reject) => {
      // TODO: Logic to exchange proof of authenticity for an App Check token and
      // expiration time.

      // ...

      const appCheckToken = {
        token: tokenFromServer,
        expireTimeMillis: expirationFromServer * 1000
      };

      resolve(appCheckToken);
    });
  }
});

網頁版 8

const appCheckCustomProvider = {
  getToken: () => {
    return new Promise((resolve, _reject) => {
      // TODO: Logic to exchange proof of authenticity for an App Check token and
      // expiration time.

      // ...

      const appCheckToken = {
        token: tokenFromServer,
        expireTimeMillis: expirationFromServer * 1000
      };

      resolve(appCheckToken);
    });
  }
};

3. 初始化應用檢查

在您訪問任何 Firebase 服務之前,將以下初始化代碼添加到您的應用程序:

網頁版 9

const { initializeApp } = require("firebase/app");
const { initializeAppCheck } = require("firebase/app-check");

const app = initializeApp({
  // Your firebase configuration object
});

const appCheck = initializeAppCheck(app, {
  provider: appCheckCustomProvider,

  // Optional argument. If true, the SDK automatically refreshes App Check
  // tokens as needed.
  isTokenAutoRefreshEnabled: true    
});

網頁版 8

firebase.initializeApp({
  // Your firebase configuration object
});

const appCheck = firebase.appCheck();
appCheck.activate(
  appCheckCustomProvider,

  // Optional argument. If true, the SDK automatically refreshes App Check
  // tokens as needed.
  true);

在您的應用程序中安裝 App Check 庫後,部署它。

更新後的客戶端應用將開始發送 App Check 令牌以及它向 Firebase 發出的每個請求,但 Firebase 產品不需要令牌有效,直到您在 Firebase 控制台的 App Check 部分啟用強制執行。有關詳細信息,請參閱接下來的兩節。

4. 監控請求指標

現在您的更新應用已掌握在用戶手中,您可以為您使用的 Firebase 產品啟用 App Check 的強制執行。但是,在您這樣做之前,您應該確保這樣做不會干擾您現有的合法用戶。

實時數據庫和雲存儲

您可以用來為實時數據庫和雲存儲做出此決定的一個重要工具是 App Check 請求指標屏幕。

要查看應用程序檢查請求指標的產物,打開項目設置>應用檢查的火力地堡控制台的部分。例如:

App Check 指標頁面的屏幕截圖

每個產品的請求指標分為四類:

  • 驗證請求是那些具有有效的應用程序檢查令牌。啟用 App Check 強制後,只有此類別中的請求才會成功。

  • 過時的客戶端請求是那些缺少應用程序檢查令牌。在 App Check 包含在應用中之前,這些請求可能來自舊版本的 Firebase SDK。

  • 來歷不明的請求是那些缺少應用程序檢查令牌,不要像他們來自火力地堡SDK。這些可能來自使用被盜 API 密鑰發出的請求或在沒有 Firebase SDK 的情況下發出的偽造請求。

  • 無效的請求是那些有一個無效的應用程序檢查令牌,這可能是從不真實客戶端試圖假冒您的應用程序,或從模擬環境。

當您決定啟用強制執行時,您的應用程序的這些類別的分佈應該通知。以下是一些指導方針:

  • 如果幾乎所有最近的請求都來自經過驗證的客戶端,請考慮啟用強制措施以開始保護您的後端資源。

  • 如果最近請求的很大一部分來自可能已過時的客戶端,為避免干擾用戶,請考慮等待更多用戶更新您的應用,然後再啟用強制執行。對已發布的應用程序強制執行 App Check 將破壞未與 App Check SDK 集成的先前應用程序版本。

  • 如果您的應用程序尚未啟動,您應該立即啟用 App Check 強制執行,因為沒有任何過時的客戶端在使用。

雲功能

對於 Cloud Functions,您可以通過檢查函數的日誌來獲取 App Check 指標。可調用函數的每次調用都會發出一個結構化的日誌條目,如下例所示:

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

您可以通過分析在谷歌雲端控制台這些指標建立一個日誌,基於計數器的度量與以下數據過濾器:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

標籤的指標使用領域jsonPayload.verifications.appCheck

5. 啟用執行

要啟用強制執行,請按照以下每個產品的說明進行操作。為產品啟用強制執行後,所有對該產品的未經驗證的請求都將被拒絕。

實時數據庫和雲存儲

要啟用實時數據庫和雲存儲的強制執行:

  1. 打開項目設置>應用程序檢查的火力地堡控制台部分。

  2. 展開要為其啟用強制執行的產品的指標視圖。

  3. 點擊強制執行,並確認您的選擇。

請注意,啟用強制執行後最多可能需要 10 分鐘才能生效。

雲功能

請參閱啟用應用檢查執法雲功能