حماية بيانات اعتماد السحابة الإلكترونية لتطبيق تعلُّم الآلة في Firebase

إذا كان تطبيقك على Android يستخدم إحدى واجهات برمجة التطبيقات السحابية لتعلُّم الآلة في Firebase، يجب اتخاذ بعض الخطوات الإضافية لمنع الوصول غير المصرَّح به إلى واجهة برمجة التطبيقات قبل إطلاق تطبيقك في مرحلة الإنتاج.

بالنسبة إلى تطبيقات الإنتاج، عليك التأكّد من أنّ العملاء الذين تمت مصادقتهم فقط هم مَن يمكنهم الوصول إلى خدمات السحابة الإلكترونية. (ملاحظة: يمكن فقط للأجهزة غير المزوّدة بإذن الوصول إلى الجذر إجراء المصادقة باستخدام الطريقة الموضّحة).

بعد ذلك، ستنشئ مفتاح واجهة برمجة تطبيقات لتصحيح الأخطاء فقط يمكنك استخدامه لتسهيل عملية الاختبار والتطوير.

1- تسجيل تطبيقات الإنتاج في Firebase

أولاً، عليك تسجيل تطبيقات الإنتاج في Firebase.

  1. تأكد من توفُّر توقيعات SHA-1 لتطبيقك. راجِع المقالة مصادقة عميلك لمعرفة كيفية إجراء ذلك.

  2. انتقِل إلى إعدادات المشروع في وحدة تحكُّم Firebase، ثم اختَر علامة التبويب الإعدادات.

  3. انتقِل للأسفل وصولاً إلى بطاقة تطبيقاتك، ثم اختَر تطبيق Android المطلوب.

  4. إضافة توقيع SHA-1 لتطبيقك إلى معلومات التطبيق.

2- حصر إمكانية الوصول إلى مفاتيح واجهة برمجة التطبيقات

بعد ذلك، اضبط مفاتيح واجهة برمجة التطبيقات الحالية لمنع الوصول إلى واجهة برمجة التطبيقات Cloud Vision:

  1. افتح صفحة بيانات الاعتماد لوحدة تحكُّم Google Cloud. اختَر مشروعك عندما يُطلب منك ذلك.

  2. افتح عرض التعديل لكل مفتاح واجهة برمجة تطبيقات حالي في القائمة.

  3. في القسم قيود واجهة برمجة التطبيقات، اختَر Restrict key (المفتاح)، ثم أضِف جميع واجهات برمجة التطبيقات التي تريد منح مفتاح واجهة برمجة التطبيقات إذن الوصول إليها إلى القائمة. تأكَّد من عدم تضمين Cloud Vision API.

    عند ضبط قيود واجهة برمجة التطبيقات الخاصة بمفتاح واجهة برمجة التطبيقات، يتم الإفصاح صراحةً عن واجهات برمجة التطبيقات التي يمكن للمفتاح الوصول إليها. بشكل تلقائي، عند اختيار عدم تقييد المفتاح في قسم قيود واجهة برمجة التطبيقات، يمكن استخدام مفتاح واجهة برمجة التطبيقات للوصول إلى أي واجهة برمجة تطبيقات تم تفعيلها للمشروع.

لن تمنح مفاتيح واجهة برمجة التطبيقات الحالية إمكانية الوصول إلى خدمات تعلُّم الآلة في السحابة الإلكترونية، ولكن سيظل كل مفتاح يعمل مع أي واجهات برمجة تطبيقات أضفتها إلى قائمة قيود واجهة برمجة التطبيقات الخاصة به.

يُرجى العِلم أنّه في حال تفعيل أي واجهات برمجة تطبيقات إضافية في المستقبل، يجب إضافتها إلى قائمة قيود واجهة برمجة التطبيقات الخاصة بمفتاح واجهة برمجة التطبيقات الساري.

3- إنشاء مفتاح واجهة برمجة تطبيقات لتصحيح الأخطاء فقط واستخدامه

وأخيرًا، أنشئ مفتاح واجهة برمجة تطبيقات جديدًا لاستخدامه في التطوير فقط. يمكن لتعلُّم الآلة في Firebase استخدام مفتاح واجهة برمجة التطبيقات هذا للوصول إلى خدمات Google Cloud في البيئات التي لا يمكن فيها مصادقة التطبيقات، على سبيل المثال عند تشغيلها على أدوات محاكاة.

  1. أنشئ مفتاح واجهة برمجة تطبيقات جديدًا لاستخدامه في التطوير:

    1. افتح صفحة بيانات الاعتماد لوحدة تحكُّم Google Cloud. اختَر مشروعك عندما يُطلب منك ذلك.

    2. انقر على إنشاء بيانات اعتماد > مفتاح واجهة برمجة التطبيقات ولاحظ مفتاح واجهة برمجة التطبيقات الجديد. يتيح هذا المفتاح الوصول إلى واجهة برمجة التطبيقات من التطبيقات التي لم تتم مصادقتها، لذلك حافظ على سرية هذا المفتاح.

  2. لضمان عدم تسريب مفتاح واجهة برمجة التطبيقات الجديد لتصحيح الأخطاء مع تطبيقك الذي تم إصداره، حدِّد مفتاح واجهة برمجة التطبيقات في ملف بيان Android الذي لا يُستخدم إلا في إصدارات تصحيح الأخطاء:

    1. إذا لم يكن لديك بيان تصحيح الأخطاء، أنشئ واحدًا بالنقر على ملف > جديد > غير ذلك > ملف بيان Android واختيار debug من مجموعات المصادر المستهدفة.

    2. في بيان تصحيح الأخطاء، أضِف التعريف التالي:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. في تطبيقك، يمكنك ضبط تعلُّم الآلة في Firebase لاستخدام مطابقة الملف المرجعي للشهادة من أجل مصادقة عميلك في مرحلة الإنتاج واستخدام مفاتيح واجهة برمجة التطبيقات (مفتاح تصحيح الأخطاء) في إصدارات تصحيح الأخطاء فقط:

    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 الأخرى.