Используйте App Check для защиты вашего ключа API

Firebase App Check обеспечивает защиту вызовов из вашего приложения к платформе Google Карт, блокируя трафик, поступающий из источников, отличных от легитимных приложений. Это достигается путем проверки наличия токена от поставщика аттестации, например, reCAPTCHA Enterprise . Интеграция приложений с App Check помогает защититься от вредоносных запросов, поэтому с вас не взимается плата за несанкционированные вызовы API.

Подходит ли мне App Check?

В большинстве случаев рекомендуется использовать проверку приложений, однако в следующих случаях проверка приложений не требуется или не поддерживается:

  • Вы используете оригинальный Places SDK. Проверка приложений поддерживается только для Places SDK (новый) .
  • Частные или экспериментальные приложения. Если ваше приложение не находится в открытом доступе, проверка приложений не требуется.
  • Если ваше приложение используется только для взаимодействия сервер-сервер, App Check не требуется. Однако, если сервер, взаимодействующий с GMP, используется публичными клиентами (например, мобильными приложениями), рассмотрите возможность использования App Check для защиты этого сервера вместо GMP.

Обзор этапов внедрения

На самом деле, для интеграции вашего приложения с App Check вам необходимо выполнить следующие шаги:

  1. Добавьте Firebase в свое приложение.
  2. Добавьте и инициализируйте библиотеку App Check.
  3. Добавьте поставщика токенов в свое приложение.
  4. Инициализируйте API Places и App Check.
  5. Включить отладку.
  6. Контролируйте запросы приложений и принимайте решения о применении мер пресечения.

После интеграции с App Check вы сможете просматривать метрики бэкэнд-трафика в консоли Firebase. Эти метрики позволяют разбить запросы по наличию или отсутствию действительного токена App Check. Подробнее см. в документации Firebase App Check .

Убедившись, что большинство запросов поступает из легитимных источников, и что пользователи обновили приложение до последней версии, включающей вашу реализацию App Check, вы можете включить принудительное применение. После включения принудительного применения App Check будет отклонять весь трафик без действительного токена App Check.

Соображения при планировании интеграции App Check

Вот некоторые моменты, которые следует учитывать при планировании интеграции:

  • reCAPTCHA Enterprise , один из рекомендуемых нами поставщиков услуг аттестации, взимает плату за более чем 10 000 оценок в месяц.

    Другой рекомендуемый нами поставщик аттестации, reCAPTCHA v3, имеет квоту, после которой трафик оцениваться не будет.

    Вы можете использовать собственный поставщик аттестации, но это уже более сложный случай. Подробнее см. в документации по App Check .

  • Пользователи вашего приложения будут испытывать некоторую задержку при запуске. Однако впоследствии периодическая повторная аттестация будет выполняться в фоновом режиме, и пользователи больше не будут испытывать задержку. Точная величина задержки при запуске зависит от выбранного вами поставщика аттестации.

    Срок действия токена App Check ( время жизни , или TTL) определяет частоту повторных аттестаций. Эту продолжительность можно настроить в консоли Firebase. Повторная аттестация выполняется по истечении примерно половины срока TTL. Подробнее см. в документации Firebase для вашего поставщика аттестации.

Интегрируйте свое приложение с App Check

Предпосылки и требования

Шаг 1: Добавьте Firebase в свое приложение

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

Шаг 2: Добавьте библиотеку App Check и инициализируйте App Check.

Firebase предоставляет инструкции для каждого поставщика аттестации по умолчанию. Эти инструкции помогут вам настроить проект Firebase и добавить библиотеку App Check в ваше приложение. Для инициализации App Check следуйте предоставленным примерам кода.

Шаг 3: загрузка библиотек Maps JS API

  1. Загрузите библиотеки ядра, карт и мест, как показано в следующем фрагменте кода. Дополнительные сведения и инструкции см. в документации по классу мест в Maps JavaScript API .

    async function init() {
      const {Settings} = await google.maps.importLibrary('core');
      const {Map} = await google.maps.importLibrary('maps');
      const {Place} = await google.maps.importLibrary('places');
    }  

Шаг 4: Инициализируйте API Places и App Check

  1. Инициализируйте App Check, используя конфигурацию, предоставленную консолью Firebase.
  2. Убедитесь, что запросы к Maps JS API сопровождаются токенами App Check:
      async function init() {
        const {Settings} = await google.maps.importLibrary('core');
        const {Map} = await google.maps.importLibrary('maps');
        const {Place} = await google.maps.importLibrary('places');
      
        const app = initializeApp({
          // Your firebase configuration object
        });
      
        // Pass your reCAPTCHA Enterprise site key to initializeAppCheck().
        const appCheck = initializeAppCheck(app, {
          provider: new ReCaptchaEnterpriseProvider(
            'abcdefghijklmnopqrstuvwxy-1234567890abcd',
          ),
      
          // Optional argument. If true, the SDK automatically refreshes App Check
          // tokens as needed.
          isTokenAutoRefreshEnabled: true,
        });
      
        Settings.getInstance().fetchAppCheckToken = () =>
            getToken(appCheck, /* forceRefresh = */ false);
      
        // Make a Places JS request
        const place = new Place({id: 'ChIJN5Nz71W3j4ARhx5bwpTQEGg'});
        await place.fetchFields({fields: ['*']});
      
        // Load a map
        map = new Map(document.getElementById("map"), {
          center: { lat: 37.4161493, lng: -122.0812166 },
          zoom: 8,
        });
      }  
      

Шаг 5: Включите отладку (необязательно)

Если вы хотите разрабатывать и тестировать приложение локально или запускать его в среде непрерывной интеграции (CI), вы можете создать отладочную сборку приложения, которая использует отладочный секрет для получения действительных токенов App Check. Это позволяет избежать использования реальных поставщиков аттестации в отладочной сборке.

Чтобы протестировать приложение локально:

  • Активируйте поставщик отладки для целей разработки.
  • Вы получите автоматически сгенерированный случайный UUID4 (который в документации App Check называется _debug token_) из журналов отладки SDK. Добавьте этот токен в консоль Firebase.
  • Дополнительную информацию и инструкции см. в документации App Check .

Чтобы запустить приложение в среде непрерывной интеграции:

  • Сгенерируйте случайный UUID4 из консоли Firebase.
  • Добавьте UUID4 в качестве отладочного токена, а затем скопируйте его в секретное хранилище, к которому тесты CI будут обращаться при каждом запуске теста.
  • Дополнительную информацию и инструкции см. в документации App Check .

Шаг 6: Отслеживайте запросы приложений и принимайте решение о применении мер принудительного характера

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

Дополнительную информацию и инструкции см. в документации по Firebase App Check .