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

אתה יכול להגן על משאבי האפליקציה שלך שאינם Firebase, כגון backends המתארחים בעצמך, באמצעות App Check. לשם כך, יהיה עליך לשנות את לקוח האפליקציות שלך כדי לשלוח אסימון צ'ק -אפליקציה יחד עם כל בקשה למערך האחורי שלך, ולשנות את הקצה שלך כדי לדרוש אסימון חוקי של צ'ק -אפליקציה עם כל בקשה; שתי המשימות מתוארות להלן.

לפני שאתה מתחיל

להוסיף App Check באפליקציה, תוך שימוש בפורמט ברירת המחדל ספק v3 reCAPTCHA , או ספק מנהג .

שלח אסימונים לבדיקת אפליקציות עם בקשות backend

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

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

גרסת אינטרנט 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.
};

גרסת אינטרנט 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.
};

אמת אסימונים של Check Check ב- backend

בקוד backend שלך, אם אתה לא כבר התקנת SDK של ניהול Node.js , לעשות זאת. לאחר מכן, הוסף היגיון לנקודות הקצה של ה- API שלך שעושה את הפעולות הבאות:

  • בדוק שכל בקשה כוללת אסימון צ'ק App.

  • בדוק את בדיקת יישום האסימון באמצעות SDK של מנהל appCheck().verifyToken() שיטה.

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