在網頁應用程式中使用 App Check 保護非 Firebase 資源

您可以使用 App Check 保護應用程式的非 Firebase 資源,例如自行管理的後端。如要這麼做,您需要執行這兩項操作:

  • 修改應用程式用戶端,以便在每次向後端傳送要求時一併傳送 App Check 權杖,如本頁所述。
  • 修改後端,要求每項要求都提供有效的 App Check 權杖,如「從自訂後端驗證 App Check 權杖」一文所述。

事前準備

使用 reCAPTCHA Enterprise 供應器自訂供應器,將 App Check 新增至應用程式。

透過後端要求傳送 App Check 權杖

在應用程式用戶端中,請在每次要求前,使用 appCheck().getToken() 取得有效且未過期的 App Check 權杖。App Check 程式庫會視需要重新整理權杖。

取得有效的權杖後,請將該權杖與要求傳送至後端。具體做法由您決定,但請勿將 App Check 權杖當作網址的一部分傳送,包括在查詢參數中,否則可能會發生意外洩漏和攔截的情形。下列 「範例」會透過自訂 HTTP 標頭傳送權杖, 。

Web

import { initializeAppCheck, getToken } from 'firebase/app-check';

const appCheck = initializeAppCheck(
    app,
    { provider: provider } // ReCaptchaV3Provider or CustomProvider
);

const callApiWithAppCheckExample = async () => {
  let appCheckTokenResponse;
  try {
      appCheckTokenResponse = await getToken(appCheck, /* forceRefresh= */ false);
  } catch (err) {
      // Handle any errors if the token was not retrieved.
      return;
  }

  // Include the App Check token with requests to your server.
  const apiResponse = await fetch('https://yourbackend.example.com/yourApiEndpoint', {
      headers: {
          'X-Firebase-AppCheck': appCheckTokenResponse.token,
      }
  });

  // Handle response from your backend.
};

Web

const callApiWithAppCheckExample = async () => {
  let appCheckTokenResponse;
  try {
      appCheckTokenResponse = await firebase.appCheck().getToken(/* forceRefresh= */ false);
  } catch (err) {
      // Handle any errors if the token was not retrieved.
      return;
  }

  // Include the App Check token with requests to your server.
  const apiResponse = await fetch('https://yourbackend.example.com/yourApiEndpoint', {
      headers: {
          'X-Firebase-AppCheck': appCheckTokenResponse.token,
      }
  });

  // Handle response from your backend.
};

重播防護措施 (Beta 版)

向已啟用的端點傳送要求時 重播防護措施 使用 getLimitedUseToken() (而非 getToken()) 取得權杖:

import { getLimitedUseToken } from "firebase/app-check";

// ...

appCheckTokenResponse = await getLimitedUseToken(appCheck);