שימוש ב-App Check לאבטחת מפתח ה-API

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

האם בדיקת האפליקציות מתאימה לי?

מומלץ להשתמש ב-App Check ברוב המקרים, אבל אין צורך ב-App Check או שהוא לא נתמך במקרים הבאים:

  • אתם משתמשים ב-Places SDK המקורי. יש תמיכה ב-App Check רק ב-Places SDK (חדש).
  • אפליקציות פרטיות או ניסיוניות. אם האפליקציה שלכם לא זמינה לכולם, אין צורך לבצע בדיקת אפליקציות.
  • אם האפליקציה שלכם משמשת רק לשרת-לשרת, אין צורך בבדיקה של האפליקציה. עם זאת, אם לקוחות ציבוריים (כמו אפליקציות לנייד) משתמשים בשרת שמתקשר עם GMP, מומלץ להשתמש ב-App Check כדי להגן על השרת הזה במקום ב-GMP.
  • ספקי האימות המומלצים של App Check לא יפעלו במכשירים שנחשבים לא מהימנים או שנמצאים בסיכון לפריצה על ידי ספק האימות. אם אתם צריכים לתמוך במכשירים כאלה, תוכלו לפרוס שירות אימות בהתאמה אישית. מידע נוסף זמין בהוראות.

סקירה כללית של שלבי ההטמעה

באופן כללי, אלה השלבים שצריך לבצע כדי לשלב את האפליקציה עם App Check:

  1. מוסיפים את Firebase לאפליקציה.
  2. הוספה של ספריית App Check ואיפוס שלה.
  3. מוסיפים את ספק האסימונים לאפליקציה.
  4. מפעילים את ממשקי ה-API של Places ושל בדיקת האפליקציות.
  5. מפעילים את ניפוי הבאגים.
  6. מעקב אחר הבקשות של האפליקציה והחלטות לגבי אכיפת המדיניות.

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

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

שיקולים בתכנון שילוב של App Check

אלה כמה דברים שכדאי להביא בחשבון כשמתכננים את השילוב:

  • ספקי האימות שאנחנו ממליצים עליהם, Device Check או App Attest, כפופים למכסות ולהגבלות שקבעה Apple.

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

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

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

שילוב האפליקציה עם App Check

דרישות מוקדמות ודרישות

  • אפליקציה עם ערכת Places SDK בגרסה 9.2 ואילך.
  • מזהה החבילה של האפליקציה.
  • מזהה הצוות שלכם מ-Apple Member Center, בקטע Membership (מינוי).
  • אם אתם מתכננים להשתמש בבדיקה של המכשיר, קובץ המפתח הפרטי ומזהה המפתח.
  • עליכם להיות הבעלים של האפליקציה במסוף Cloud.
  • עליכם למצוא את מזהה הפרויקט של האפליקציה במסוף Cloud.

שלב 1: מוסיפים את Firebase לאפליקציה

פועלים לפי ההוראות במסמכי התיעוד למפתחים של Firebase כדי להוסיף את Firebase לאפליקציה.

כשרושמים את האפליקציה, מקבלים קובץ תצורה, GoogleService-Info.plist. מוסיפים את הקובץ הזה, ללא שינוי, לרמה הבסיסית (root) של האפליקציה.

Swift

import FirebaseCore
import FirebaseAppCheck
import GooglePlaces

Objective-C

@import FirebaseCore;      
@import FirebaseAppCheck;
@import GooglePlaces;

שלב 2: מוסיפים את הספרייה של App Check ומפעילים את App Check

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

  1. פועלים לפי ההוראות של Firebase כדי להוסיף את ספריית App Check:
  2. מאתחלים את App Check.
    • אם אתם משתמשים ב-App Attest, עליכם לפעול לפי מסמכי התיעוד למפתחים של Firebase בנושא App Attest.

      פועלים לפי ההוראות של Firebase App Check כדי ליצור הטמעה של AppCheckProviderFactory ולהוסיף אותה לקובץ AppDelegate.

      Swift

      let providerFactory = YourAppCheckProviderFactory()
      AppCheck.setAppCheckProviderFactory(providerFactory)

      Objective-C

      YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
         
    • אם משתמשים בבדיקת המכשיר, מוסיפים את הקוד הבא ל-AppDelegate:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
            

שלב 3: מוסיפים את ספק האסימונים

יוצרים קובץ בשם AppCheckTokenProvider (או, אם משתמשים ב-Objective-C, שני קבצים בשם AppCheckTokenProvider.h ו-AppCheckTokenProvider.m) ברמת השורש של האפליקציה. מוסיפים את הצהרות הייבוא ואת הגדרת הכיתה הבאות:

Swift

// AppCheckTokenProvider.swift

import FirebaseAppCheck
import Foundation
import GooglePlaces

class AppCheckTokenProvider: NSObject, GMSPlacesAppCheckTokenProvider {
  func fetchAppCheckToken() async throws -> String {
    return try await AppCheck.appCheck().token(forcingRefresh: false).token
  }
}

Objective-C

// AppCheckTokenProvider.h

@import Foundation;
@import GooglePlaces;

@interface AppCheckTokenProvider : NSObject <GMSPlacesAppCheckTokenProvider>
@end

// AppCheckTokenProvider.m

#import "AppCheckTokenProvider.h"

@import FirebaseAppCheck;

@implementation AppCheckTokenProvider

- (void)fetchAppCheckTokenWithCompletion:(nonnull GMSAppCheckTokenCompletion)completion {
  [[FIRAppCheck appCheck]
      tokenForcingRefresh:NO
               completion:^(FIRAppCheckToken *_Nullable token, NSError *_Nullable error) {
                 if (token) {
                   completion(token.token, nil);
                 } else {
                   completion(nil, error);
                 }
               }];
}

@end

שלב 4: מאתחלים את ממשקי ה-API של Places ושל בדיקת האפליקציות

  1. בקובץ AppDelegate, מאתחלים את Places API:

    Swift

    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

    Objective-C

    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
  2. לאחר מכן, מאתחלים את App Check API:

    Swift

    GMSPlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())

    Objective-C

    [GMSPlacesClient setAppCheckTokenProvider:[[AppCheckTokenProvider alloc] init]];

שלב 5: מפעילים את ניפוי הבאגים (אופציונלי)

אם אתם רוצים לפתח ולבדוק את האפליקציה באופן מקומי, או להריץ אותה בסביבת שילוב רצוף (CI), אתם יכולים ליצור גרסה של האפליקציה לצורכי ניפוי באגים שמשתמשת בסוד לניפוי באגים כדי לקבל אסימונים תקינים של App Check. כך תוכלו להימנע משימוש בספקים אמיתיים של אימות ב-build לניפוי באגים.

כדי לבדוק את האפליקציה בסימולטור או במכשיר בדיקה:

  • יצירת המפעל של ספק ניפוי הבאגים של App Check והגדרתו.

    דוגמת הקוד הזו מטפלת גם בתרחישים של ניפוי באגים וגם בתרחישים של ייצור:

    Swift

    #if targetEnvironment(simulator)
          let providerFactory = AppCheckDebugProviderFactory()
    #else
          let providerFactory = YourAppCheckProviderFactory()
    #endif

    Objective-C

    if (targetEnvironment == simulator){
    
    FIRAppCheckDebugProviderFactory *providerFactory =
          [[FIRAppCheckDebugProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
    
    else {
    
    YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
        
  • מפעילים את הרישום ביומן בפרויקט Xcode, מריצים את האפליקציה ומחפשים את אסימון ניפוי הבאגים המקומי ביומן.
  • מוסיפים את האסימון הזה למסוף Firebase.
  • מידע נוסף והוראות מפורטות זמינים במסמכי התיעוד של App Check.

כדי להריץ את האפליקציה בסביבת CI:

  • יוצרים אסימון ניפוי באגים במסוף Firebase ומוסיפים אותו למאגר המפתחות המאובטח של מערכת ה-CI.
  • ב-Xcode, מוסיפים משתנה סביבה לתוכנית הבדיקה עם השם FIRAAppCheckDebugToken והערך $(APP_CHECK_DEBUG_TOKEN) (או משהו דומה).
  • בסקריפט הבדיקה של ה-CI, מעבירים את טוקן ניפוי הבאגים כסביבה
  • יצירת המפעל של ספק ניפוי הבאגים של App Check והגדרתו.

    דוגמת הקוד הזו מטפלת גם בתרחישים של ניפוי באגים וגם בתרחישים של ייצור:

    Swift

      #if targetEnvironment(ci)
            let providerFactory = AppCheckDebugProviderFactory()
            AppCheck.setAppCheckProviderFactory(providerFactory)
      #else
            let providerFactory = YourAppCheckProviderFactory()
      #endif
      

    Objective-C

    if (targetEnvironment == ci) {
    FIRAppCheckDebugProviderFactory *providerFactory =
          [[FIRAppCheckDebugProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
    
    else {
    YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
  • מידע נוסף והוראות מפורטות זמינים במסמכי התיעוד של App Check.

שלב 6: מעקב אחר הבקשות של האפליקציה והחלטות לגבי אכיפה

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

מידע נוסף והוראות מפורטות זמינים במסמכי התיעוד של Firebase App Check.