הגנה על משאבים שאינם של Firebase באמצעות App Check באפליקציות אינטרנט

אפשר להגן על המשאבים באפליקציה שלא פועלים ב-Firebase, כמו קצוות עורפיים באירוח עצמי, באמצעות App Check. לשם כך, תצטרכו לבצע את שתי הפעולות הבאות:

  • צריך לשנות את לקוח האפליקציה כך שישלח אסימון App Check יחד עם כל בקשה לקצה העורפי, כפי שמתואר בדף הזה.
  • משנים את הקצה העורפי כך שיידרש אסימון App Check תקף בכל בקשה, כפי שמתואר במאמר אימות אסימוני App Check מקצה עורפי מותאם אישית.

לפני שמתחילים

מוסיפים את App Check לאפליקציה באמצעות הספק של reCAPTCHA Enterprise או ספק מותאם אישית.

שליחת אסימוני App Check עם בקשות לקצה העורפי

בלקוח האפליקציה, לפני כל בקשה, צריך לקבל אסימון App Check תקף ותקף באמצעות appCheck().getToken(). הספרייה App Check תחדש את האסימון במקרה הצורך.

אחרי שתקבלו אסימון תקף, עליכם לשלוח אותו יחד עם הבקשה לקצה העורפי. אתם מחליטים מה בדיוק לעשות. עם זאת, אסור לשלוח אסימונים מסוג App Check כחלק מכתובות URL, כולל בפרמטרים של שאילתה, כי הם עלולים להיחשף לדליפה וליירוט בטעות. בדוגמה הבאה נשלח האסימון בכותרת 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.
};

הגנה מפני הפעלה חוזרת (בטא)

כששולחים בקשה לנקודת קצה (endpoint) שמופעלת בה הגנה להפעלה מחדש, מקבלים אסימון באמצעות getLimitedUseToken() במקום getToken():

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

// ...

appCheckTokenResponse = await getLimitedUseToken(appCheck);