הגנה על פרטי הכניסה לאפליקציית 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 שאליהם יש למפתח גישה. כברירת מחדל, בקטע APIs (הגבלות על ממשקי API) בוחרים באפשרות don't limit 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 שמשמש רק לגרסאות build לניפוי באגים:

    1. אם עדיין אין לכם מניפסט לניפוי באגים, תוכלו ליצור אותו באמצעות לחיצה על File > New > Other > Android Manifest File (קובץ מניפסט של 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.