ウェブアプリのアプリチェックでFirebase以外のリソースを保護する

App Checkを使用すると、自己ホスト型バックエンドなど、アプリのFirebase以外のリソースを保護できます。そのためには、次の両方を行う必要があります。

  • このページで説明されているように、アプリクライアントを変更して、各リクエストとともにアプリチェックトークンをバックエンドに送信します。
  • カスタムバックエンドからのアプリチェックトークンの確認で説明されているように、リクエストごとに有効なアプリチェックトークンを要求するようにバックエンドを変更します。

あなたが始める前に

reCAPTCHA v3プロバイダーreCAPTCHA Enterpriseプロバイダー、またはカスタムプロバイダーのいずれかを使用して、アプリにアプリチェックを追加します。

バックエンドリクエストでアプリチェックトークンを送信する

アプリクライアントで、各リクエストの前に、 appCheck().getToken()を使用して有効な有効期限の切れていないAppCheckトークンを取得します。 App Checkライブラリは、必要に応じてトークンを更新します。

有効なトークンを取得したら、リクエストと一緒にバックエンドに送信します。これを実現する方法の詳細はあなた次第ですが、URLの一部として、クエリパラメータを含め、App Checkトークンを送信しないでください。これにより、偶発的なリークや傍受に対して脆弱になります。次の例では、推奨されるアプローチであるカスタムHTTPヘッダーでトークンを送信します。

Web version 9

const { initializeAppCheck, getToken } = require('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 version 8

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.
};