Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

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

App Checkを使用すると、セルフホストバックエンドなど、アプリのFirebase以外のリソースを保護できます。これを行うには、アプリクライアントを変更して各リクエストとともにアプリチェックトークンをバックエンドに送信し、バックエンドを変更してすべてのリクエストで有効なアプリチェックトークンを要求する必要があります。両方のタスクを以下に説明します。

あなたが始める前に

デフォルトのいずれかを使用して、あなたのアプリにアプリのチェックを追加reCAPTCHAのv3のプロバイダ、またはカスタムプロバイダを

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

アプリのクライアントでは、各要求の前に、有効なを取得し、期限が切れていない、アプリケーションがでトークンをチェックappCheck().getToken() App Checkライブラリは、必要に応じてトークンを更新します。

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

Webバージョン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バージョン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.
};

バックエンドでアプリチェックトークンを確認する

あなたは既にインストールされていない場合は、あなたのバックエンドのコードでは、 Node.jsの管理SDKを、そう。次に、APIエンドポイントに次のロジックを追加します。

  • 各リクエストにアプリチェックトークンが含まれていることを確認します。

  • 管理SDKの使用トークンアプリのチェックを確認しappCheck().verifyToken()メソッドを。

    検証が成功した場合、 verifyToken() 、復号アプリケーションはトークンチェックを返します。検証が成功すると、トークンがFirebaseプロジェクトに属するアプリから発信されたことが示されます。

いずれかのチェックに失敗したリクエストを拒否します。たとえば、Express.jsミドルウェアを使用すると次のようになります。

const express = require('express');
const app = express();

const firebaseAdmin = require('firebase-admin');
const firebaseApp = firebaseAdmin.initializeApp();

const appCheckVerification = async (req, res, next) => {
    const appCheckToken = req.header('X-Firebase-AppCheck');

    if (!appCheckToken) {
        res.status(401);
        return next('Unauthorized');
    }

    try {
        const appCheckClaims = await firebaseAdmin.appCheck().verifyToken(appCheckToken);

        // If verifyToken() succeeds, continue with the next middleware
        // function in the stack.
        return next();
    } catch (err) {
        res.status(401);
        return next('Unauthorized');
    }
}

app.get('/yourApiEndpoint', [appCheckVerification], (req, res) => {
    // Handle request.
});