Реализация пользовательского поставщика проверки приложений.

App Check имеет встроенную поддержку нескольких поставщиков: DeviceCheck и App Attest на платформах Apple, Play Integrity на Android и reCAPTCHA Enterprise в веб-приложениях ( обзор ). Это хорошо известные поставщики, которые должны удовлетворить потребности большинства разработчиков. Однако вы также можете реализовать свои собственные пользовательские поставщики App Check . Использование пользовательского поставщика необходимо в следующих случаях:

  • Вам нужно использовать поставщика услуг, отличного от встроенных.

  • Вы хотите использовать встроенные поставщики неподдерживаемыми способами.

  • Вы хотите проверять устройства, используя платформы, отличные от Apple, Android и веб-браузера. Например, вы можете создать поставщиков App Check для настольных ОС или устройств Интернета вещей.

  • Вы хотите внедрить собственные методы проверки на любой платформе.

Обзор

Для реализации собственного поставщика App Check ) вам потребуется безопасная серверная среда, способная запускать Node.js Firebase Admin SDK . Это может быть Cloud Functions , платформа контейнеризации, такая как Cloud Run , или ваш собственный сервер.

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

Обычно этот сервис предоставляется в виде REST или gRPC конечной точки, но этот момент остается на ваше усмотрение.

Создайте конечную точку для получения токенов.

  1. Установите и инициализируйте Admin SDK .

  2. Создайте доступную по сети конечную точку, которая сможет получать данные аутентификации от ваших клиентов. Например, используя Cloud Functions :

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. Добавьте в конечную точку логику, которая оценивает данные подлинности. Это основная логика вашего пользовательского поставщика App Check , которую вам нужно будет написать самостоятельно.

  4. Если вы убедитесь в подлинности клиента, используйте Admin SDK для создания токена App Check и верните его клиенту вместе со временем истечения срока действия:

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    Если вам не удаётся проверить подлинность клиента, верните ошибку (например, HTTP 403).

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

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

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

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

Теперь, когда вы реализовали серверную логику своего пользовательского поставщика, узнайте, как использовать её в своих клиентах Apple , Android и веб- клиентах.