הגנה על פרטי הכניסה לאפליקציית Firebase ML ל-Android ב-Cloud

אם אפליקציית Android שלכם משתמשת באחד מממשקי ה-API בענן של Firebase ML, לפני שתפעילו את האפליקציה בסביבת הייצור, עליכם לבצע כמה פעולות נוספות כדי למנוע גישה לא מורשית ל-API.

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

לאחר מכן, תיצורו מפתח API לצורך ניפוי באגים בלבד, שתוכלו להשתמש בו לנוחות במהלך הבדיקה והפיתוח.

1. רישום האפליקציות בסביבת הייצור ב-Firebase

קודם כול, צריך לרשום את האפליקציות בסביבת הייצור ב-Firebase.

  1. מוודאים שיש לכם את החתימות של האפליקציה ב-SHA-1. במאמר אימות הלקוח מוסבר איך עושים את זה.

  2. עוברים אל Project settings (הגדרות הפרויקט) ב- במסוף Firebase, ובוחרים בכרטיסייה Settings (הגדרות).

  3. גוללים למטה לכרטיס האפליקציות שלך ובוחרים באפליקציה ל-Android.

  4. מוסיפים את החתימה של האפליקציה ב-SHA-1 למידע על האפליקציה.

2. הגבלת ההיקף של מפתחות ה-API

בשלב הבא, מגדירים את מפתחות ה-API הקיימים כך שלא יאפשרו גישה ל-Cloud Vision API:

  1. פותחים את הדף Credentials במסוף Google Cloud. כשמופיעה בקשה, בוחרים את הפרויקט הרצוי.

  2. פותחים את תצוגת העריכה של כל מפתח API קיים ברשימה.

  3. בקטע API restrictions, בוחרים באפשרות Restrict key ומוסיפים לרשימה את כל ממשקי ה-API שרוצים לתת למפתח ה-API גישה אליהם. חשוב לא לכלול את Cloud Vision API.

    כשמגדירים הגבלות על ממשקי API של מפתח API, מצהירים באופן מפורש על ממשקי ה-API שיש למפתח גישה אליהם. כברירת מחדל, כשבקטע API restrictions מסומן האפשרות Don't restrict key, אפשר להשתמש במפתח API כדי לגשת לכל ממשק API שמופעל בפרויקט.

מעכשיו, מפתחות ה-API הקיימים לא יעניקו גישה לשירותי ה-ML בענן, אבל כל מפתח ימשיך לפעול לכל ממשקי ה-API שהוספתם לרשימת ההגבלות על ממשקי ה-API שלו.

חשוב לזכור: אם תפעילו ממשקי API נוספים בעתיד, תצטרכו להוסיף אותם לרשימה API restrictions של מפתח ה-API הרלוונטי.

3. יצירת מפתח API לצורכי ניפוי באגים בלבד ושימוש בו

לבסוף, יוצרים מפתח API חדש לשימוש רק לצורכי פיתוח. Firebase ML יכול להשתמש במפתח ה-API הזה כדי לגשת לשירותי Google Cloud בסביבות שבהן אי אפשר לבצע אימות של האפליקציה, למשל כשהיא פועלת במהדמנים.

  1. יוצרים מפתח API חדש לשימוש בפיתוח:

    1. פותחים את הדף Credentials במסוף Google Cloud. כשמופיעה בקשה, בוחרים את הפרויקט הרצוי.

    2. לוחצים על Create credentials > API key ומתעדים את מפתח ה-API החדש. המפתח הזה מאפשר גישה ל-API מאפליקציות לא מאומתות, לכן חשוב לשמור על הסודיות של המפתח הזה.

  2. כדי לוודא שמפתח ה-API החדש לניפוי באגים לא ייחשף עם האפליקציה שפורסמה, צריך לציין את מפתח ה-API לניפוי באגים בקובץ מניפסט של Android שמשמש רק ל-builds לניפוי באגים:

    1. אם עדיין אין לכם מניפסט לניפוי באגים, תוכלו ליצור אותו בלחיצה על קובץ > חדש > אחר > קובץ מניפסט של Android ובחירה באפשרות debug מתוך קבוצות מקורות היעד.

    2. במניפסט לניפוי באגים, מוסיפים את ההצהרה הבאה:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. באפליקציה, מגדירים את Firebase ML כך שישתמש בהתאמה של טביעת אצבע האישור כדי לאמת את הלקוח בסביבת הייצור, וישתמש במפתחות API – מפתח ניפוי הבאגים – רק בגרסאות build לצורך ניפוי באגים:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

השלבים הבאים

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