firebase - 是否可以从不在同一个 GCloud 项目中的应用程序中使用 Firebase Cloud Messaging API?
问题描述
我有一个用 NodeJS 编写的 k8s 应用程序(我们称之为 App1),它位于 GCloud 项目(我们称之为 GCP1)上。App1 目前使用:
- 另一个项目 (GCP2) 中的 Cloud Datastore。App1 在 GCP2 上无缝认证,因为 App1 的服务帐户在 GCP2 上具有角色datastore.user;
- 另一个项目 (GCP3) 中的 Firebase 管理员,我们使用它通过 FCM 发送推送通知。App1 使用存储在秘密环境变量中的证书凭据在 GCP3 上进行身份验证。
我想摆脱这种在 GCP3 上进行身份验证的硬编码和潜在危险的方式,所以我做了以下操作:
- 我改变了 App1 的 Firebase Admin 构造函数:
admin.initializeApp({
credential: admin.credential.cert(SECRETS_HERE)
});
对此:
admin.initializeApp({
credential: admin.credential.applicationDefault(),
projectId: "GCP3_PROJECT_ID"
});
- 我在 GCP3 上为 App1 的 SA分配了firebasenotifications.admin角色。
但这不起作用:(。我收到以下错误:
通过“凭据”属性提供给 initializeApp() 的凭据实现未能获取有效的 Google OAuth2 访问令牌,并出现以下错误:“无法解析访问令牌响应:错误:服务器响应状态为 403。
所以我的问题是:
这甚至可能吗(使用来自另一个 GCloud 项目的 FCM API)?
如果是,我该怎么做(或者我在这里做错了什么)?
是否可以在本地测试此场景而不必生成/下载/使用 GCP1 的服务帐户私钥?
如果是,怎么做?
解决方案
似乎您的应用程序已经正常运行,而您只是在进行更改以增强安全性。
关于你的问题:
- 您可以使用来自另一个项目的 FCM API 。您可以在一个应用程序中使用多个项目。
- 您的麻烦似乎是您用来传递令牌的方法。
- 您需要 GCP1 服务帐户的私钥,因为 GCP3 需要 GCP1 进行身份验证。
您能否分享有关是否GOOGLE_APPLICATION_CREDENTIALS
设置了环境变量的更多详细信息?你也可以试试跑步firebase logout
吗firebase login
?这将验证环境变量是否已正确配置,并确保登录了正确的帐户。
您还可以阅读有关在单个应用程序中处理多个 Firebase 项目的文档。
推荐阅读
- c++ - 无法写入 AllocConsole()
- javascript - 如何使网站在使用和不使用 javascript 的情况下工作
- r - 如何在不使用 for 循环的情况下遍历列的值?
- if-statement - “嵌套 if”或“if and multiple else if”哪个更好?
- html - 当屏幕缩小时,Font Awesome 堆叠图标消失
- python-3.x - 我如何简单地停止线程?(Python)
- javascript - 使用纯javascript克隆html元素后如何取消选中单选按钮?
- python - Flask + Wsgi 返回 python shell 脚本输出
- python - 在给定值条件的情况下获取 np 外积因子的索引
- reactjs - 将 reducer 扩展到数据略有不同的不同页面