Защитите облачные учетные данные вашего приложения Firebase ML для Android

Если ваше приложение для Android использует один из облачных API Firebase ML, прежде чем запускать свое приложение в рабочей среде, вы должны предпринять дополнительные шаги для предотвращения несанкционированного доступа к API.

Для ваших производственных приложений вы убедитесь, что только клиенты, прошедшие проверку подлинности, могут получить доступ к облачным службам. (Обратите внимание, что только нерутированные устройства могут пройти аутентификацию с использованием описанного метода.)

Затем вы создадите ключ API только для отладки, который можно использовать для удобства во время тестирования и разработки.

1. Зарегистрируйте свои рабочие приложения в Firebase.

Сначала зарегистрируйте свои рабочие приложения в Firebase.

  1. Убедитесь, что у вас есть подписи SHA-1 вашего приложения. См. Аутентификация вашего клиента , чтобы узнать, как это сделать.

  2. Перейдите к своим Настройки проекта в консоли Firebase, затем выберите вкладку Настройки .

  3. Прокрутите вниз до карточки «Ваши приложения» , затем выберите свое приложение для Android.

  4. Добавьте подпись SHA-1 вашего приложения к информации вашего приложения.

2. Ограничьте область действия ваших ключей API

Затем настройте существующие ключи API, чтобы запретить доступ к Cloud Vision API:

  1. Откройте страницу учетных данных Google Cloud Console. При появлении запроса выберите свой проект.

  2. Для каждого существующего ключа API в списке откройте режим редактирования.

  3. В разделе ограничений API выберите Ограничить ключ , затем добавьте в список все API, к которым вы хотите, чтобы ключ API имел доступ. Убедитесь, что вы не включили Cloud Vision API.

    Когда вы настраиваете ограничения API ключа API, вы явно объявляете API, к которым у ключа есть доступ. По умолчанию, если в разделе ограничений API выбран параметр Не ограничивать ключ , ключ API можно использовать для доступа к любому API, включенному для проекта.

Теперь ваши существующие ключи API не будут предоставлять доступ к облачным службам машинного обучения, но каждый ключ будет продолжать работать для любых API, которые вы добавили в список ограничений API .

Обратите внимание: если вы в будущем включите какие-либо дополнительные API, вы должны добавить их в список ограничений API для соответствующего ключа API.

3. Создайте и используйте ключ API только для отладки

Наконец, создайте новый ключ API, который будет использоваться только для разработки. Firebase ML может использовать этот ключ API для доступа к службам Google Cloud в средах, где аутентификация приложений невозможна, например, при работе на эмуляторах.

  1. Создайте новый ключ API, который будет использоваться для разработки:

    1. Откройте страницу учетных данных Google Cloud Console. При появлении запроса выберите свой проект.

    2. Щелкните Создать учетные данные > Ключ API и запишите новый ключ API. Этот ключ разрешает доступ к API из приложений, не прошедших проверку подлинности, поэтому держите этот ключ в секрете .

  2. Чтобы новый ключ API отладки не попал в выпущенное приложение, укажите ключ API отладки в файле манифеста Android, который используется только для сборок отладки:

    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 — ключа отладки — только в отладочных сборках:

    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.