在網路應用程式中使用 App Check 保護自訂後端資源

您可以透過 App Check 保護應用程式的非 Google 自訂後端資源,例如自行管理的後端。如要這麼做,請完成下列兩項操作:

  • 修改您的應用程式用戶端,使其在每個向後端發送的請求中都包含一個 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);