Catch up on everthing we announced at this year's Firebase Summit. Learn more

Включение проверки приложений с помощью настраиваемого поставщика в веб-приложениях

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

Если вы хотите использовать App Check с поставщиком ReCaptcha по умолчанию, см Enable App Check с рекапчи на веб - приложений .

Прежде чем вы начнете

1. Добавьте в свое приложение библиотеку проверки приложений.

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

2. Создайте объект поставщика проверки приложений.

Создайте объект поставщика проверки приложений для своего настраиваемого поставщика. Этот объект должен иметь getToken() метод, который собирает любую информацию , пользовательское приложение Check поставщик требует в качестве доказательства подлинности, и посылает его к службе маркеров приобретения в обмен на App Проверьте маркер. App Проверьте ручки SDK маркер кэширования, поэтому всегда получить новый маркер в вашей реализации getToken() .

Веб-версия 9

const { CustomProvider } = require("firebase/app-check");

const appCheckCustomProvider = new CustomProvider({
  getToken: () => {
    return new Promise((resolve, _reject) => {
      // TODO: Logic to exchange proof of authenticity for an App Check token and
      // expiration time.

      // ...

      const appCheckToken = {
        token: tokenFromServer,
        expireTimeMillis: expirationFromServer * 1000
      };

      resolve(appCheckToken);
    });
  }
});

Веб-версия 8

const appCheckCustomProvider = {
  getToken: () => {
    return new Promise((resolve, _reject) => {
      // TODO: Logic to exchange proof of authenticity for an App Check token and
      // expiration time.

      // ...

      const appCheckToken = {
        token: tokenFromServer,
        expireTimeMillis: expirationFromServer * 1000
      };

      resolve(appCheckToken);
    });
  }
};

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

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

Веб-версия 9

const { initializeApp } = require("firebase/app");
const { initializeAppCheck } = require("firebase/app-check");

const app = initializeApp({
  // Your firebase configuration object
});

const appCheck = initializeAppCheck(app, {
  provider: appCheckCustomProvider,

  // Optional argument. If true, the SDK automatically refreshes App Check
  // tokens as needed.
  isTokenAutoRefreshEnabled: true    
});

Веб-версия 8

firebase.initializeApp({
  // Your firebase configuration object
});

const appCheck = firebase.appCheck();
appCheck.activate(
  appCheckCustomProvider,

  // Optional argument. If true, the SDK automatically refreshes App Check
  // tokens as needed.
  true);

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

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

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

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

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

Важным инструментом, который вы можете использовать для принятия этого решения для Realtime Database, Cloud Firestore и Cloud Storage, является экран показателей запроса проверки приложений.

Для просмотра метрик Проверки запроса App для продукта, откройте Настройки проекта> App Проверьте раздел консоли Firebase. Например:

Скриншот страницы показателей проверки приложений

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

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

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

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

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

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

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

  • Если значительная часть недавних запросов поступает от устаревших клиентов, чтобы не мешать работе пользователей, подумайте о том, чтобы дождаться, пока больше пользователей обновят ваше приложение, прежде чем включать принудительное применение. Принудительная проверка приложений в выпущенном приложении приведет к поломке предыдущих версий приложения, которые не интегрированы с 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 .

5. Включите принудительное исполнение

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

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

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

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

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

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

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

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

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