#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?