Можно ли использовать Firebase Cloud Messaging API из приложения, которое не входит в тот же проект GCloud?

#firebase #google-cloud-platform #firebase-cloud-messaging #gcloud

#firebase #google-cloud-platform #firebase-cloud-messaging #gcloud

Вопрос:

У меня есть приложение k8s (назовем его App1), написанное на NodeJS, которое находится в проекте GCloud (назовем его GCP1). В настоящее время App1 использует:

  • Облачное хранилище данных в другом проекте (GCP2). App1 проходит проверку подлинности в GCP2 без проблем, поскольку учетная запись службы App1 имеет роль datastore.user в GCP2;
  • администратор Firebase в другом проекте (GCP3), который мы используем для отправки push-уведомлений через FCM. App1 проверяет подлинность в GCP3 с помощью учетных данных сертификата, хранящихся в секретных переменных env.

Я хотел избавиться от этого жестко запрограммированного и потенциально опасного способа аутентификации на GCP3, поэтому я сделал следующее:

  • Я изменил конструктор администратора Firebase App1 из этого:
 admin.initializeApp({
    credential: admin.credential.cert(SECRETS_HERE)
});
  

К этому:

 admin.initializeApp({
    credential: admin.credential.applicationDefault(),
    projectId: "GCP3_PROJECT_ID"
});
  
  • Я дал SA App1 роль firebasenotifications.admin в GCP3.

Но это не работает 🙁 . Я получаю следующую ошибку:

Реализация учетных данных, предоставленная для initializeApp() через свойство «учетные данные», не смогла получить действительный токен доступа Google OAuth2 со следующей ошибкой: «Не удалось проанализировать ответ токена доступа: Ошибка: сервер ответил со статусом 403.

Итак, мои вопросы:

  • Возможно ли это вообще (используйте FCM API из другого проекта GCloud)?

  • Если да, то как я могу это сделать (или что я здесь делаю не так)?

  • Можно ли протестировать этот сценарий локально без необходимости генерировать / загружать / использовать закрытый ключ учетной записи службы GCP1?

  • Если да, то как?

Ответ №1:

Кажется, что ваше приложение уже работает, и вы просто вносите изменения для повышения безопасности.

Что касается ваших вопросов:

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

Не могли бы вы поделиться более подробной информацией о том, GOOGLE_APPLICATION_CREDENTIALS установлена ли у вас переменная среды? Можете ли вы также попробовать запустить firebase logout и firebase login ? Это позволит проверить правильность настройки переменной среды, а также убедиться, что в систему включена правильная учетная запись.

Вы также можете прочитать эту документацию о работе с несколькими проектами Firebase в одном приложении.

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

1. спасибо за ответ! Я не устанавливаю переменную GOOGLE_APPLICATION_CREDENTIALS env: вместо этого я полагаюсь на роли учетных записей службы App1 GKE, которые у него есть в других проектах. Как я уже сказал, это работает для хранилища данных в GCP2. Учетные данные не требуются. Я думаю, может быть, это не работает для Firebase?