如何解决是否可以从不在同一GCloud Project上的应用程序使用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 。
但这不起作用:(。我收到以下错误:
通过“ credential”属性提供给initializeApp()的凭据实现未能获取有效的Google OAuth2访问令牌,出现以下错误:“无法解析访问令牌响应:错误:服务器响应状态为403。
所以我的问题是:
-
这是否有可能(使用另一个GCloud项目中的FCM API)?
-
如果是,该怎么办(或者我在这里做错了什么)?
-
是否可以在本地测试此方案而不必生成/下载/使用GCP1的服务帐户私钥?
-
如果是,怎么办?
解决方法
您的应用似乎已经开始运行,并且您正在进行更改以增强安全性。
关于您的问题:
- 您可以使用another project中的FCM API。您可以在一个应用程序中使用多个项目。
- 您的麻烦似乎就是您用来传递令牌的方法。
- 您需要GCP1服务帐户的私钥,因为GCP3需要GCP1进行身份验证。
能否请您分享有关是否拥有GOOGLE_APPLICATION_CREDENTIALS
environment variable set的详细信息?您还可以尝试运行firebase logout
和firebase login
吗?这将验证环境变量的配置正确,并确保登录了正确的帐户。
您还可以阅读有关使用multiple Firebase projects in a single application的文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。