הטמעת ספק מותאם אישית של App Check

App Check כולל תמיכה מובנית בכמה ספקים: DeviceCheck ו-App Attest בפלטפורמות של אפל, Play Integrity ב-Android ו-reCAPTCHA Enterprise באפליקציות אינטרנט (סקירה כללית). אלה ספקים מוכרים שצריכים לענות על הצרכים של רוב המפתחים. עם זאת, אפשר גם להטמיע ספקי App Check מותאמים אישית משלכם. צריך להשתמש בספק מותאם אישית במקרים הבאים:

  • אתם רוצים להשתמש בספק שאינו אחד מהספקים המובנים.

  • אתם רוצים להשתמש בספקי הזהויות המובנים בדרכים שלא נתמכות.

  • אתם רוצים לאמת מכשירים באמצעות פלטפורמות אחרות מלבד Apple,‏ Android והאינטרנט. לדוגמה, אפשר ליצור App Check ספקים למערכות הפעלה למחשבים או למכשירי IoT.

  • אתם רוצים להטמיע טכניקות אימות משלכם בכל פלטפורמה.

סקירה כללית

כדי להטמיע ספק App Check מותאם אישית, צריך סביבת קצה עורפי מאובטחת שיכולה להריץ את Node.js Firebase Admin SDK. יכול להיות שזה Cloud Functions, פלטפורמת קונטיינרים כמו Cloud Run, או שרת משלכם.

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

בדרך כלל חושפים את השירות הזה כנקודת קצה של REST או gRPC, אבל זה תלוי בכם.

יצירת נקודת הקצה להשגת הטוקן

  1. מתקינים ומפעילים את Admin SDK.

  2. יוצרים נקודת קצה (endpoint) שאפשר לגשת אליה ברשת ויכולה לקבל נתוני אותנטיות מהלקוחות. לדוגמה, באמצעות Cloud Functions:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. מוסיפים ללוגיקה של נקודת הקצה את ההערכה של נתוני האותנטיות. זוהי לוגיקת הליבה של ספק App Check מותאם אישית, שתצטרכו לכתוב בעצמכם.

  4. אם קובעים שהלקוח אותנטי, משתמשים ב-Admin SDK כדי ליצור טוקן App Check ולהחזיר אותו ואת תאריך התפוגה שלו ללקוח:

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    אם לא ניתן לאמת את האותנטיות של הלקוח, צריך להחזיר שגיאה (לדוגמה, להחזיר שגיאת HTTP 403).

  5. אופציונלי: כדי להגדיר את אורך החיים (TTL) של אסימוני App Check שהונפקו על ידי הספק המותאם אישית, מעבירים אובייקט AppCheckTokenOptions אל createToken(). אפשר להגדיר את ה-TTL לכל ערך בין 30 דקות ל-7 ימים. כשמגדירים את הערך הזה, חשוב לשים לב לשיקולים הבאים:

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

    ערך ברירת המחדל של TTL הוא שעה אחת, וזה ערך סביר לרוב האפליקציות.

השלבים הבאים

אחרי שמטמיעים את הלוגיקה בצד השרת של ספק הנתונים המותאם אישית, אפשר ללמוד איך להשתמש בה מלקוחות Apple,‏ Android ואינטרנט.