Позвольте моему приложению Firebase запускать исключительно микросервисы

# #firebase #authentication #jwt #microservices

Вопрос:

У меня есть виртуальная машина Google, на которой запущено мое докеризованное приложение, а также мое интерфейсное приложение Firebase.

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

Каков наилучший вариант для такой задачи? Единственное, что я нашел, — это веб-токены json (jwts). Достаточно ли этого для работы? Есть ли что-то лучше?

Если jwt-это то, что нужно, то какова логика, которую должен иметь код? Должен ли сервер создать ключ и отправить его микросервису, затем микросервис должен его декодировать, и только если он соответствует значению, он должен продолжить выполнение задания?

Комментарии:

1. Новая функция проверки приложений Firebase была создана для такого рода вещей, но я не думаю, что серверный API для нее еще готов.

2. @FrankvanPuffelen Спасибо! Но когда вы имеете в виду серверную сторону, вы имеете в виду сторону микросервиса (в отличие от стороны firebase). Правильно ли я это понял?

3. Правильный. Проверка приложений в настоящее время позволяет определенным службам Firebase разрешать трафик только из приложений, зарегистрированных в проекте, вы ищете другую сторону этого: разрешайте трафик только из этих приложений в свои службы. Это то, что рассматривается для проверки приложений, просто пока нет. Также смотрите groups.google.com/g/firebase-talk/c/rU0fEozdMyc/m/AYUa6PpLCAAJ


Ответ №1:

Здесь огнемет.

На самом деле я не совсем уверен в вашей архитектуре, но если вы хотите уменьшить количество злоупотреблений на своем собственном сервере, который обслуживает ваше приложение Firebase на Android, iOS или в Интернете, то да, мы работаем над поддержкой этого варианта использования в проверке приложений.

Однако проверка приложений не предназначена для обеспечения безопасности связи между серверами (оба сервера находятся под вашим контролем). В облаке Google это обычно делается с помощью учетных записей служб и элементов управления IAM.

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

Для получения маркера проверки приложения вы можете отправить СООБЩЕНИЕ на эти конечные точки. На самом деле это те же конечные точки, которые используются SDK под капотом, поэтому вы можете изучить их источник, чтобы увидеть примеры того, как выполняются эти вызовы. Вы также должны следовать их примеру, чтобы периодически повторно проверять приложение и повторно получать токены проверки приложений в зависимости от истечения срока действия возвращенного токена проверки приложений.

[правка: Сначала не забудьте зарегистрировать свои приложения в проверке приложений. Смотрите нашу документацию здесь.]

  • Для проверки устройств используйте https://firebaseappcheck.googleapis.com/v1beta/projects/<project_number>/apps/<app_id>:exchangeDeviceCheckToken?key=<api_key>
  • Для reCAPTCHA v3 используйте https://firebaseappcheck.googleapis.com/v1beta/projects/<project_number>/apps/<app_id>:exchangeRecaptchaToken?key=<api_key>
    • тело должно быть объектом JSON с одним строковым полем, recaptcha_token . Это токен reCAPTCHA, возвращаемый API JavaScript reCAPTCHA v3.
  • Для обеспечения безопасности в сети используйте https://firebaseappcheck.googleapis.com/v1beta/projects/<project_number>/apps/<app_id>:exchangeSafetyNetToken?key=<api_key>
  • Для пользовательских поставщиков следуйте инструкциям из нашей общедоступной документации. Однако вы не будете использовать SDK для проверки приложений в своем приложении. Вместо этого вам нужно написать код напрямую, чтобы связаться со своим сервером токенов.

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

Как только ваше приложение получит маркер проверки приложения с помощью вышеуказанного, вы должны прикреплять его к каждому запросу, направленному в API (на вашем сервере), который вы хотите защитить. Например, вы можете отправить маркер проверки приложения через заголовок. Как только ваш сервер получит такой запрос, используйте API-интерфейс Admin SDK Verify Token для проверки этого токена. Например,

 const admin = require("firebase-admin");

admin.initializeApp();

async function verifyToken(token) {
  admin.appCheck().verifyToken(token)
    .then((token) => {
      console.log(token.token)
    })
    .catch((e) => console.log(e))
}
 

Этот API проверки токенов на самом деле является тем, что наш SDK вызываемых функций использует под капотом. Если токен недействителен, ваш сервер должен отклонить запрос.

Обратите внимание, что этот API-интерфейс проверки токенов может выполнять вызов GET, но затем кэшируется в течение определенного периода времени на нашу конечную точку открытых ключей, поэтому имейте это в виду, если у вас ограниченная пропускная способность, ограниченные циклы процессора или нет кэширования во время проверки токенов:

  • https://firebaseappcheck.googleapis.com/v1beta/jwks
    • Это возвращает набор JWK, указанный в разделе 5 RFC 7517, содержащий открытые ключи, которые можно использовать для проверки наших токенов проверки приложений.

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

Комментарии:

1. Спасибо вам за пост! Это отличная ссылка. По сути, я хочу, чтобы мой сервер flask, работающий в контейнере docker в виртуальной машине Google, принимал только вызовы из моего приложения Firebase и исключал все другие запросы от других сторон.

2. После более подробных исследований я наткнулся на эту тему: cloud.google.com/functions/docs/networking/connecting-vpc . Возможен ли вариант управления доступом микросервиса к серверу Firebase?

Ответ №2:

огнемет здесь

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

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

Также смотрите https://groups.google.com/g/firebase-talk/c/rU0fEozdMyc/m/AYUa6PpLCAAJ

Комментарии:

1. Спасибо. У вас есть какие-либо предложения о том, как я могу это сделать сейчас?

2. После более подробных исследований я наткнулся на эту тему: cloud.google.com/functions/docs/networking/connecting-vpc . Возможен ли вариант управления доступом микросервиса к серверу Firebase?