Catch up on everthing we announced at this year's Firebase Summit. Learn more

Защитите учетные данные своего приложения 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. Откройте Credentials страницу в Google Cloud Console. При появлении запроса выберите свой проект.

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

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

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

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

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

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

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

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

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

    2. Нажмите кнопку Создать учетные данные> ключ API и принять к сведению нового ключа API. Этот ключ позволяет получить доступ API из неаутентифицированных приложений, так держать этот ключ в тайне.

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

    1. Если вы уже не имеете отладочный манифест, создать, нажав File> New> Other> Android Manifest файл и выбрав debug из множества целевых источников.

    2. В манифест отладки добавьте следующее объявление:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. В своем приложении настройте Firebase ML для использования сопоставления отпечатков сертификатов для аутентификации вашего клиента в рабочей среде и для использования ключей API - отладочного ключа - только в отладочных сборках:

    Джава

    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);

    Котлин + 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)

Следующие шаги

См запуска контрольного списка для получения информации о подготовке вашего приложения к запуску при использовании других функций Firebase.