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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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.