Используйте проверку приложений для защиты вашего ключа API (новинка)

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

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

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

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

Обзор этапов реализации

В общих чертах, это шаги, которые вы должны выполнить, чтобы интегрировать свое приложение с App Check:

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

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

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

Что следует учитывать при планировании интеграции App Check

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

  • На рекомендуемых нами поставщиков аттестации ( Device Check или App Attest ) распространяются квоты и ограничения, установленные Apple.

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

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

    Время, в течение которого токен проверки приложения действителен ( время жизни или TTL), определяет частоту повторных аттестаций. Эту продолжительность можно настроить в консоли Firebase. Повторная аттестация происходит по истечении примерно половины TTL. Дополнительную информацию см. в документации Firebase вашего провайдера аттестации.

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

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

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

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

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

Быстрый

import FirebaseCore
import FirebaseAppCheck
import GooglePlaces

Цель-C

@import FirebaseCore;      
@import FirebaseAppCheck;
@import GooglePlaces;

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

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

  1. Следуйте инструкциям Firebase, чтобы добавить библиотеку проверки приложений:
  2. Инициализируйте проверку приложений.
    • Если вы используете App Attest, следуйте документации разработчика Firebase для App Attest. .

      Следуйте инструкциям Firebase App Check , чтобы создать реализацию AppCheckProviderFactory и добавить ее в свой файл AppDelegate .

      Быстрый

      let providerFactory = YourAppCheckProviderFactory()
      AppCheck.setAppCheckProviderFactory(providerFactory)

      Цель-C

      YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
         
    • Если вы используете проверку устройства, добавьте в свой AppDelegate следующее:

      Быстрый

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Цель-C

      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
            

Шаг 3. Добавьте поставщика токенов

Создайте файл с именем AppCheckTokenProvider (или, если вы используете Objective-C, два файла с именами AppCheckTokenProvider.h и AppCheckTokenProvider.m ) на корневом уровне вашего приложения. Добавьте следующие операторы импорта и определение класса:

Быстрый

// 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
  }
}

Цель-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.

  1. В файле AppDelegate инициализируйте Places API:

    Быстрый

    GMSPlacesClient.provideAPIKey("YOUR_API_KEY")

    Цель-C

    [GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
  2. Затем инициализируйте API проверки приложений:

    Быстрый

    GMSPlacesClient.setAppCheckTokenProvider(AppCheckTokenProvider())

    Цель-C

    [GMSPlacesClient setAppCheckTokenProvider:[[AppCheckTokenProvider alloc] init]];

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

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

Чтобы протестировать приложение в симуляторе или на тестовом устройстве:

  • Создайте и настройте фабрику поставщиков отладки App Check.

    Этот пример кода обрабатывает как сценарии отладки, так и рабочие сценарии:

    Быстрый

    #if targetEnvironment(simulator)
          let providerFactory = AppCheckDebugProviderFactory()
    #else
          let providerFactory = YourAppCheckProviderFactory()
    #endif

    Цель-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 .

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

  • Создайте токен отладки в консоли Firebase и добавьте его в безопасное хранилище ключей вашей системы CI.
  • В Xcode добавьте переменную среды в вашу схему тестирования с именем FIRAAppCheckDebugToken и $(APP_CHECK_DEBUG_TOKEN) (или чем-то подобным) в качестве значения.
  • В тестовом сценарии CI передайте токен отладки в качестве среды.
  • Создайте и настройте фабрику поставщиков отладки App Check.

    Этот пример кода обрабатывает как сценарии отладки, так и рабочие сценарии:

    Быстрый

      #if targetEnvironment(ci)
            let providerFactory = AppCheckDebugProviderFactory()
            AppCheck.setAppCheckProviderFactory(providerFactory)
      #else
            let providerFactory = YourAppCheckProviderFactory()
      #endif
      

    Цель-C

    if (targetEnvironment == ci) {
    FIRAppCheckDebugProviderFactory *providerFactory =
          [[FIRAppCheckDebugProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
    
    else {
    YourAppCheckProviderFactory *providerFactory =
          [[YourAppCheckProviderFactory alloc] init];
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
    }
  • Дополнительную информацию и инструкции см. в документации App Check .

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

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

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