Check out what’s new from Firebase at Google I/O 2022. Learn more

Включить проверку приложений с помощью App Attest на платформах Apple

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

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

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

1. Настройте свой проект Firebase

  1. Вам понадобится Xcode 12.5+, чтобы использовать App Attest.

  2. Добавьте Firebase в свой проект Apple, если вы еще этого не сделали.

  3. Зарегистрируйте свои приложения для использования проверки приложений у поставщика аттестации приложений в разделе « Проверка приложений » консоли Firebase.

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

  4. Необязательно : в настройках регистрации приложения установите пользовательское время жизни (TTL) для токенов проверки приложений, выпущенных провайдером. Вы можете установить TTL на любое значение от 30 минут до 7 дней. При изменении этого значения помните о следующих компромиссах:

    • Безопасность: более короткие значения TTL обеспечивают более высокий уровень безопасности, поскольку они уменьшают окно, в котором злоумышленник может злоупотребить утечкой или перехваченным токеном.
    • Производительность. Чем короче TTL, тем чаще ваше приложение будет выполнять аттестацию. Поскольку процесс аттестации приложения добавляет задержку к сетевым запросам каждый раз, когда он выполняется, короткий TTL может повлиять на производительность вашего приложения.
    • Квота и стоимость. Более короткие значения TTL и частая повторная аттестация истощают вашу квоту быстрее, а платные услуги могут стоить дороже. См. Квоты и лимиты .

    Значение TTL по умолчанию, равное 1 часу , подходит для большинства приложений. Обратите внимание, что библиотека App Check обновляет токены примерно вдвое меньше TTL.

2. Добавьте библиотеку App Check в свое приложение.

  1. Добавьте зависимость для App Check в Podfile вашего проекта:

    pod 'FirebaseAppCheck'

    Или, в качестве альтернативы, вы можете вместо этого использовать диспетчер пакетов Swift .

    Убедитесь, что вы также используете последнюю версию любых других SDK Firebase, от которых вы зависите.

  2. Запустите pod install и откройте созданный файл .xcworkspace .

  3. В Xcode добавьте в свое приложение возможность App Attest .

  4. В файле .entitlements вашего проекта установите рабочую среду App production .

3. Инициализировать проверку приложений

Вам нужно будет инициализировать проверку приложений, прежде чем использовать какие-либо другие SDK Firebase.

Сначала напишите реализацию AppCheckProviderFactory . Специфика вашей реализации будет зависеть от вашего варианта использования.

Например, если у вас есть пользователи только на iOS 14 и более поздних версиях, вы всегда можете просто создать объекты AppAttestProvider :

Быстрый

Примечание. Этот продукт Firebase недоступен для целевых устройств watchOS.

class YourSimpleAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return AppAttestProvider(app: app)
  }
}

Цель-C

Примечание. Этот продукт Firebase недоступен для целевых устройств watchOS.

@interface YourSimpleAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourSimpleAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  return [[FIRAppAttestProvider alloc] initWithApp:app];
}

@end

Или вы можете создать объекты AppAttestProvider в iOS 14 и более поздних версиях и вернуться к DeviceCheckProvider в более ранних версиях:

Быстрый

Примечание. Этот продукт Firebase недоступен для целевых устройств watchOS.

class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    if #available(iOS 14.0, *) {
      return AppAttestProvider(app: app)
    } else {
      return DeviceCheckProvider(app: app)
    }
  }
}

Цель-C

Примечание. Этот продукт Firebase недоступен для целевых устройств watchOS.

@interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  if (@available(iOS 14.0, *)) {
    return [[FIRAppAttestProvider alloc] initWithApp:app];
  } else {
    return [[FIRDeviceCheckProvider alloc] initWithApp:app];
  }
}

@end

После того, как вы реализовали класс AppCheckProviderFactory , настройте проверку приложений для его использования:

Быстрый

Примечание. Этот продукт Firebase недоступен для целевых устройств watchOS.

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

FirebaseApp.configure()

Цель-C

Примечание. Этот продукт Firebase недоступен для целевых устройств watchOS.

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

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

Обновленное клиентское приложение начнет отправлять токены проверки приложений вместе с каждым запросом, который он отправляет в Firebase, но продукты Firebase не будут требовать, чтобы токены были действительными, пока вы не включите принудительное применение в разделе «Проверка приложений» консоли Firebase. Дополнительные сведения см. в следующих двух разделах.

5. Отслеживайте метрики запросов

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

База данных в реальном времени, облачное хранилище Firestore и облачное хранилище

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

Чтобы просмотреть метрики запроса App Check для продукта, откройте раздел App Check в консоли Firebase. Например:

Скриншот страницы метрик App Check

Метрики запросов для каждого продукта разбиты на четыре категории:

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

  • Устаревшие клиентские запросы — это те, в которых отсутствует токен проверки приложения. Эти запросы могут исходить от более старой версии Firebase SDK до того, как проверка приложений была включена в приложение.

  • Запросы неизвестного происхождения — это запросы, в которых отсутствует токен проверки приложений, и они не выглядят так, как будто они исходят из Firebase SDK. Это могут быть запросы, сделанные с украденными ключами API, или поддельные запросы, сделанные без Firebase SDK.

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

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

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

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

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

Облачные функции

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

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

Вы можете проанализировать эти метрики в Google Cloud Console, создав метрику счетчика на основе журналов со следующим фильтром метрик:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

Пометьте метрику , используя поле jsonPayload.verifications.appCheck .

6. Включить правоприменение

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

База данных в реальном времени, облачное хранилище Firestore и облачное хранилище

Чтобы включить принудительное применение базы данных в реальном времени, Cloud Firestore (iOS и Android) и облачного хранилища:

  1. Откройте раздел « Проверка приложений » в консоли Firebase.

  2. Разверните представление показателей продукта, для которого вы хотите включить принудительное применение.

  3. Нажмите Принудительно и подтвердите свой выбор.

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

Облачные функции

См. раздел Включение принудительной проверки приложений для облачных функций .

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

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

См. раздел Использование проверки приложений с поставщиком отладки на платформах Apple .