Используйте App Check для защиты вашего ключа API
Firebase App Check обеспечивает защиту вызовов вашего приложения к платформе Google Карт, блокируя трафик, поступающий из источников, отличных от легитимных приложений. Это достигается путем проверки наличия токена у поставщика аттестации, например App Attest . Интеграция приложений с App Check помогает защититься от вредоносных запросов, поэтому с вас не взимается плата за несанкционированные вызовы API.
Подходит ли мне App Check?
В большинстве случаев рекомендуется использовать проверку приложений, однако в следующих случаях проверка приложений не требуется или не поддерживается:
- Вы используете оригинальный Places SDK. Проверка приложений поддерживается только для Places SDK (новый) .
- Частные или экспериментальные приложения. Если ваше приложение не находится в открытом доступе, проверка приложений не требуется.
- Если ваше приложение используется только для взаимодействия сервер-сервер, App Check не требуется. Однако, если сервер, взаимодействующий с GMP, используется публичными клиентами (например, мобильными приложениями), рассмотрите возможность использования App Check для защиты этого сервера вместо GMP.
- Рекомендованные App Check поставщики аттестации не будут работать на устройствах, которые ваш поставщик аттестации считает скомпрометированными или ненадёжными. Если вам требуется поддержка таких устройств, вы можете развернуть собственную службу аттестации. Подробнее см. в инструкциях .
Обзор этапов внедрения
На самом деле, для интеграции вашего приложения с App Check вам необходимо выполнить следующие шаги:
- Добавьте Firebase в свое приложение.
- Добавьте и инициализируйте библиотеку App Check.
- Добавьте поставщика токенов в свое приложение.
- Инициализируйте API Places и App Check.
- Включить отладку.
- Контролируйте запросы приложений и принимайте решения о применении мер пресечения.
После интеграции с App Check вы сможете просматривать метрики бэкэнд-трафика в консоли Firebase. Эти метрики позволяют разбить запросы по наличию или отсутствию действительного токена App Check. Подробнее см. в документации Firebase App Check .
Убедившись, что большинство запросов поступает из легитимных источников, и что пользователи обновили приложение до последней версии, включающей вашу реализацию App Check, вы можете включить принудительное применение. После включения принудительного применения App Check будет отклонять весь трафик без действительного токена App Check.
Соображения при планировании интеграции App Check
Вот некоторые моменты, которые следует учитывать при планировании интеграции:
Рекомендуемые нами поставщики подтверждения подлинности — Device Check или App Attest — подчиняются квотам и ограничениям, установленным Apple.
Вы можете использовать собственный поставщик аттестации, но это уже более сложный случай. Подробнее см. в документации по Firebase App Check .
Пользователи вашего приложения будут испытывать некоторую задержку при запуске. Однако впоследствии периодическая повторная аттестация будет выполняться в фоновом режиме, и пользователи больше не будут испытывать задержку. Точная величина задержки при запуске зависит от выбранного вами поставщика аттестации.
Срок действия токена App Check ( время жизни , или TTL) определяет частоту повторных аттестаций. Эту продолжительность можно настроить в консоли Firebase. Повторная аттестация выполняется по истечении примерно половины срока TTL. Подробнее см. в документации Firebase для вашего поставщика аттестации.
Интегрируйте свое приложение с App Check
Предпосылки и требования
- Приложение с установленным Places SDK версии 9.2 или более поздней.
- Идентификатор пакета приложения .
- Ваш идентификатор команды из Центра участников Apple в разделе «Членство».
- Если вы планируете использовать Device Check, ваш файл закрытого ключа и идентификатор ключа .
- Вы должны быть владельцем приложения в Cloud Console.
- Вам понадобится идентификатор проекта приложения из Cloud Console.
Шаг 1: Добавьте Firebase в свое приложение
Следуйте инструкциям в документации разработчика Firebase , чтобы добавить Firebase в свое приложение.
При регистрации приложения вы получите файл конфигурации GoogleService-Info.plist
. Добавьте этот файл без изменений в корневой каталог приложения.
Places Swift SDK для iOS
import FirebaseCore import FirebaseAppCheck import GooglePlacesSwift
Быстрый
import FirebaseCore import FirebaseAppCheck import GooglePlaces
Objective-C
@import FirebaseCore; @import FirebaseAppCheck; @import GooglePlaces;
Шаг 2: Добавьте библиотеку App Check и инициализируйте App Check.
Firebase предоставляет инструкции для каждого поставщика аттестации по умолчанию. Эти инструкции помогут вам настроить проект Firebase и добавить библиотеку App Check в ваше приложение. Для инициализации App Check следуйте предоставленным примерам кода.
- Следуйте инструкциям Firebase, чтобы добавить библиотеку App Check:
- Инициализировать проверку приложения.
- Если вы используете App Attest, следуйте документации разработчика Firebase по App Attest.
Следуйте инструкциям Firebase App Check , чтобы создать реализацию
AppCheckProviderFactory
и добавить ее в файлAppDelegate
.Places Swift SDK для iOS
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory)
Быстрый
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- Если вы используете Device Check, добавьте в
AppDelegate
следующее:Places Swift SDK для iOS
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Быстрый
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
[FIRAppCheck setAppCheckProviderFactory:providerFactory];
- Если вы используете App Attest, следуйте документации разработчика Firebase по App Attest.
Шаг 3: Добавьте поставщика токенов
Создайте файл AppCheckTokenProvider
(или, если вы используете Objective-C, два файла AppCheckTokenProvider.h
и AppCheckTokenProvider.m
) в корневом каталоге вашего приложения. Добавьте следующие операторы импорта и определение класса:
Places Swift SDK для iOS
// AppCheckTokenProvider.swift import FirebaseAppCheck import Foundation import GooglePlacesSwift struct TokenProvider: AppCheckTokenProvider { func fetchAppCheckToken() async throws -> String { return try await AppCheck.appCheck().token(forcingRefresh: false).token } }
Быстрый
// AppCheckTokenProvider.swift import FirebaseAppCheck import Foundation import GooglePlaces class AppCheckTokenProvider: NSObject, GMSPlacesAppCheckTokenProvider { func fetchAppCheckToken() async throws -> String { return try await AppCheck.appCheck().token(forcingRefresh: false).token } }
Objective-C
// AppCheckTokenProvider.h @import Foundation; @import GooglePlaces; @interface AppCheckTokenProvider : NSObject <GMSPlacesAppCheckTokenProvider> @end // AppCheckTokenProvider.m #import "AppCheckTokenProvider.h" @import FirebaseAppCheck; @implementation AppCheckTokenProvider - (void)fetchAppCheckTokenWithCompletion:(nonnull GMSAppCheckTokenCompletion)completion { [[FIRAppCheck appCheck] tokenForcingRefresh:NO completion:^(FIRAppCheckToken *_Nullable token, NSError *_Nullable error) { if (token) { completion(token.token, nil); } else { completion(nil, error); } }]; } @end
Шаг 4: Инициализируйте API Places и App Check
- В файле
AppDelegate
инициализируйте API Places:Places Swift SDK для iOS
PlacesClient.provideAPIKey("YOUR_API_KEY")
Быстрый
GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
- Затем инициализируйте API проверки приложений:
Places Swift SDK для iOS
PlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())
Быстрый
GMSPlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())
Objective-C
[GMSPlacesClient setAppCheckTokenProvider:[[AppCheckTokenProvider alloc] init]];
Шаг 5: Включите отладку (необязательно)
Если вы хотите разрабатывать и тестировать приложение локально или запускать его в среде непрерывной интеграции (CI), вы можете создать отладочную сборку приложения, которая использует отладочный секрет для получения действительных токенов App Check. Это позволяет избежать использования реальных поставщиков аттестации в отладочной сборке.
Чтобы протестировать приложение в симуляторе или на тестовом устройстве:
Создайте и настройте фабрику поставщиков отладки App Check.
Этот пример кода обрабатывает как отладочный, так и производственный сценарии:Places Swift SDK для iOS
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif
Быстрый
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif
Objective-C
if (targetEnvironment == simulator){ FIRAppCheckDebugProviderFactory *providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; } else { YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; }
- Включите ведение журнала в вашем проекте Xcode, запустите приложение и найдите локальный токен отладки в журнале.
- Добавьте этот токен в консоль Firebase.
- Дополнительную информацию и инструкции см. в документации App Check .
Чтобы запустить приложение в среде непрерывной интеграции:
- Создайте токен отладки в консоли Firebase и добавьте его в защищенное хранилище ключей вашей системы CI.
- В Xcode добавьте в схему тестирования переменную среды с именем
FIRAAppCheckDebugToken
и$(APP_CHECK_DEBUG_TOKEN)
(или аналогичным) в качестве значения. - В тестовом скрипте CI передайте токен отладки как среду
Создайте и настройте фабрику поставщиков отладки App Check.
Этот пример кода обрабатывает как отладочный, так и производственный сценарии:Places Swift SDK для iOS
#if DEBUG let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Быстрый
#if DEBUG let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
#if DEBUG id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; #else // DEBUG id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init]; #endif // DEBUG AppCheck.setAppCheckProviderFactory(providerFactory)
- Дополнительную информацию и инструкции см. в документации App Check .
Шаг 6: Отслеживайте запросы приложений и принимайте решение о применении мер принудительного характера
Прежде чем начать принудительное применение, убедитесь, что это не будет мешать легальным пользователям вашего приложения. Для этого откройте экран показателей проверки приложений, чтобы узнать, какой процент трафика вашего приложения проверен, устарел или является нелегитимным. Как только вы увидите, что большая часть трафика проверена, вы можете включить принудительное применение.
Дополнительную информацию и инструкции см. в документации по Firebase App Check .