Как защитить ключ API с помощью App Check
Проверка приложений Firebase защищает вызовы платформы Google Карт из вашего приложения, блокируя трафик из других источников. Для этого он проверяет наличие токена от поставщика аттестации, например reCAPTCHA Enterprise. Интеграция приложений с Проверкой приложений помогает защититься от вредоносных запросов, чтобы вы не платили за несанкционированные вызовы API.
Подходит ли мне App Check?
Проверка приложений рекомендуется в большинстве случаев, однако она не требуется или не поддерживается в следующих случаях:
- Вы используете исходную версию Places SDK. Проверка приложений поддерживается только в Places SDK (New).
- Частные или экспериментальные приложения. Если ваше приложение не является общедоступным, проверка приложений не требуется.
- Если ваше приложение используется только для межсерверного взаимодействия, App Check не требуется. Однако если сервер, который взаимодействует с GMP, используется общедоступными клиентами (например, мобильными приложениями), рекомендуем использовать для защиты этого сервера App Check вместо GMP.
Обзор этапов реализации
На высоком уровне вы выполните следующие шаги, чтобы интегрировать свое приложение с App Check:
- Добавьте Firebase в приложение.
- Добавьте и инициализируйте библиотеку App Check.
- Добавьте поставщика токенов в приложение.
- Инициализируйте Places API и App Check API.
- Включите отладку.
- Отслеживайте запросы приложений и принимайте решения о принудительном применении.
После интеграции с App Check вы сможете просматривать показатели трафика бэкенда в консоли Firebase. Эти показатели позволяют распределять запросы по наличию действительного токена App Check. Подробную информацию можно найти в документации по Проверке приложений Firebase.
Когда вы убедитесь, что большинство запросов поступает из надежных источников и пользователи обновили приложение до последней версии, в которой реализована Проверка приложений, вы можете включить принудительное применение. После этого App Check будет отклонять весь трафик без действительного токена.
Что нужно учитывать при планировании интеграции App Check
При планировании интеграции необходимо учитывать следующее:
- Один из рекомендуемых нами поставщиков, reCAPTCHA Enterprise,взимает плату за более чем 10 000 проверок в месяц.
У другого рекомендуемого поставщика, reCAPTCHA v3, есть квота, после исчерпания которой трафик не оценивается.
Вы можете использовать стороннего поставщика аттестации, но это расширенная функция. Дополнительную информацию можно найти в документации по проверке приложений.
-
Пользователи вашего приложения будут сталкиваться с задержками при запуске. Однако в дальнейшем периодическая повторная аттестация будет выполняться в фоновом режиме, и пользователи больше не должны сталкиваться с задержками. Точная задержка при запуске зависит от выбранного поставщика аттестации.
Срок действия токена App Check (время жизни, или TTL) определяет частоту повторных проверок. Этот период можно настроить в консоли Firebase. Повторное подтверждение выполняется, когда проходит примерно половина TTL. Дополнительную информацию можно найти в документации Firebase для вашего поставщика аттестации.
Интегрируйте приложение с App Check
Требования
- Приложение, в котором загружены последняя еженедельная или ежеквартальная версия Maps JS API, а также библиотеки Core и Places.
- Облачный проект с включенными Maps JS и Places API (New).
- Вы должны быть владельцем приложения в Cloud Console.
- Вам понадобится идентификатор проекта приложения из Cloud Console.
Шаг 1. Добавьте Firebase в приложение
Добавьте Firebase в приложение, следуя инструкциям в документации для разработчиков.
Шаг 2. Добавьте библиотеку App Check и инициализируйте App Check
Firebase предоставляет инструкции для каждого поставщика аттестации по умолчанию. В этих инструкциях рассказывается, как настроить проект Firebase и добавить библиотеку App Check в приложение. Чтобы инициализировать App Check, следуйте примерам кода.
Шаг 3. Загрузите библиотеки Maps JS API
Загрузите библиотеки Core, Maps и Places, как показано в следующем фрагменте кода. Дополнительную информацию и инструкции можно найти в документации по классу Place в 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. Инициализируйте Places API и App Check API
- Инициализируйте Проверку приложений, используя конфигурацию, предоставленную консолью Firebase.
- Убедитесь, что запросы к Maps JS 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'); 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), вы можете создать отладочную сборку своего приложения, которая использует секрет отладки для получения действительных токенов проверки приложений. Это позволяет не использовать реальных поставщиков аттестации в отладочной сборке.
Чтобы протестировать приложение локально, выполните следующие действия:
- Активируйте отладочного поставщика для целей разработки.
- Вы получите автоматически сгенерированный случайный UUID4 (в документации по Проверке приложений он называется _токеном отладки_) из журналов отладки SDK. Добавьте этот токен в консоль Firebase.
- Дополнительную информацию и инструкции можно найти в документации по Проверке приложений.
Чтобы запустить приложение в среде непрерывной интеграции, выполните следующие действия:
- Сгенерируйте случайный UUID4 в консоли Firebase.
- Добавьте UUID4 в качестве токена отладки, а затем скопируйте его в хранилище секретов, к которому тесты непрерывной интеграции будут обращаться при каждом запуске.
- Дополнительную информацию и инструкции можно найти в документации по Проверке приложений.
Шаг 6. Отслеживайте запросы приложения и принимайте меры
Прежде чем начать принудительное применение, убедитесь, что вы не помешаете законным пользователям вашего приложения. Для этого посетите экран показателей App Check, чтобы узнать, какой процент трафика вашего приложения является проверенным, устаревшим или незаконным. Когда вы увидите, что большая часть трафика подтверждена, вы можете включить принудительное применение.
Дополнительную информацию и инструкции можно найти в документации по Проверке приложений Firebase.