问题标签 [firebase-admin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 为什么在我重新登录之前,Android Firebase 会停止同步?
在我重新登录之前,Android Firebase 似乎停止同步。
- 我使用 Firebase Admin SDK 将数据推送到 Firebase。
- 我向手机发送一条 FCM 消息以将其唤醒。该消息包含新数据的推送 ID。Android 应用程序会读取 Firebase,直到它看到新的推送 ID,然后处理数据。
通常这是有效的。有时电话会处于看不到新推送 ID 的状态。注销/登录会使其重新开始工作。
这不是竞争条件,因为我在 FCM 消息中将推送 ID 发送到手机。这让 Android 应用程序可以读取,直到它看到推送 ID(或者在我的情况下有时会超时)。我已验证数据已推送到 Firebase,并且 Android 应用正在尝试读取正确的 ID。
一旦手机处于这种状态,它就会继续失败,直到我重新登录。没有错误或异常(uid 不为空,我可以附加监听器)。它只是永远不会看到新的推送 ID。如果我注销并重新登录(不重新启动应用程序),那么它会再次开始工作。这是一个非常间歇性的问题。
当手机无法读取已知的良好推送 ID 时,我可以存储凭据并使用新的身份验证令牌重新登录(顺便说一句,该应用程序使用由 Firebase Admin SDK 生成的自定义令牌)
问题:我是否遗漏了有关身份验证的内容?为什么在我重新登录之前,Android 应用程序会停止同步?
firebase - Firebase Admin SDK initializeApp 返回 invalid_token
回报:
错误:通过“凭据”属性提供给 initializeApp() 的凭据实现未能获取有效的 Google OAuth2 访问令牌,并出现以下错误:“获取访问令牌时出错:invalid_grant(无效的 JWT:令牌必须是短期令牌并且在合理的时间框架)”。此错误的最可能原因是使用已撤销的证书密钥文件。确保您的密钥文件的密钥 ID 仍然存在于 https://console.firebase.google.com/iam-admin/serviceaccounts/project中。如果没有,请在https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk生成一个新的密钥文件 。
和service_account
密钥 ID 存在。
firebase - Firebase 数据库并发数据写入
为了在 Firebase 数据库中写入数据,我在我的 android 应用程序中使用 setValue()。
我的问题是:如果同时使用 Admin API 更改值,变量的值可以更改吗?
javascript - 将用户属性设置为 firebase-admin
我有以下游戏的角色创建流程,并在服务器上使用 firebase-admin 来验证数据,我遇到的一个问题是弄清楚如何在服务器上添加用户属性,所以这是一个想法:
- 经过身份验证的用户将字符数据发送到
/queue/create
- firebase-admin服务器监听这个变化
/queue/create
- firebase-admin接收并验证角色的数据
- 如果成功的 firebase-admin将新的字符数据推送到
/characters
- [无法弄清楚这一点] firebase-admin像这样向用户添加属性
user.updateProfile({ character: /* id of character node created by firebase-admin */ })
这里的问题是我可以访问客户端上的用户,但不能访问我的管理服务器,是的,我可以在客户端设置它,但宁愿在服务器上保留这样的逻辑。我已经在第 1 步中将 uid 与侧面字符数据一起传递,这也被添加到字符节点以进行进一步的安全验证。
编辑:我在写这篇文章时出现了一个子问题,我们能否以某种方式处理用户更改他们自己的用户个人资料数据,因为我相信这是可能的?
angularjs - 在 angularjs 中包含 firebase-admin SDK 模块
我想在 angularJS 中使用 firebase-admin,但我不知道该怎么做。
任何帮助将不胜感激。谢谢。
node.js - 在 laravel 中使用 Firebase-admin 时未找到依赖项
我在跑:
Laravel 混合版本:0.8.8
节点版本(7.5.0):
NPM 版本(4.1.2):
我正在尝试在我的 Laravel 5.4 项目中使用Firebase-adminnpm install --save firebase-admin
当我这样做require('firebase-admin');
时,我resources/assets/js/app.js
会运行npm run dev
此错误:
我尝试了别名webpack.mix.js
但没有运气
我也尝试过这样做,但也没有运气
javascript - 在 PHP 文件上获取 webhook,需要将变量传递给 JS 文件(写入 firebase)
我正在使用 PHP 文件来检索 webhook。每次传递数据时,php 文件都会解析并创建一个带有一些字符串的变量。
我有另一个写入 firebase 的 .js 文件(使用使用 firebase-admin 的服务器端)。
如何将变量传递给 .js 文件,以便将变量数据写入 fb?
PHP:
firebase_webhook.js:
node.js - Firebase Admin SDK 的 Node.js 身份验证服务器 - JWT 验证问题
我正在做一个项目,我们将在微服务架构中使用不同的服务,并且我们还想使用一些 Firebase 服务。我正在开发一个身份验证服务器,该服务器将创建自定义 JWT,以用于 Firebase 以及其他 API 项目。
我们希望使用 Firebase Auth SDK 轻松与 FB、Google、Twitter 等集成,但我们需要用更多数据丰富用户的令牌。因此,我的想法是创建一个使用 Firebase Admin SDK 来执行此操作的 Node.JS 身份验证服务器。流程如下:
- 用户在客户端使用最喜欢的提供商登录
- 如果登录成功,用户会收到来自 Firebase 的 JWT。这被发送到身份验证服务器进行验证
- 如果身份验证服务器可以使用管理 SDK 验证令牌,则创建一个包含更多数据的新自定义令牌,并将此新自定义令牌返回给客户端
- 让客户端使用新的自定义令牌重新进行身份验证,并将其用于与 Firebase 以及我们的其他 API 项目(主要在 .NET Core 中)进行通信
步骤 1-3 工作正常。尝试验证其他服务上的自定义令牌时会出现问题。
TL; DR:这里有两个问题:
- 验证使用 Firebase Node.JS Admin SDK 发布的自定义令牌时,我应该使用什么作为公钥?从 Google 公开的 JWK 中提取的密钥,还是从用于签名的私钥中提取的密钥?
- 在 JWK 方法的情况下,我应该如何构造带有
kid
标题的自定义令牌?
首先,我怀疑验证它的正确方法。(请原谅,我在创建 OAuth 流程方面没有经验。)使用的算法是 RS256,所以我应该能够使用公钥来验证令牌。如我所见,有两种方法可以获取此密钥:
- 从私钥中提取公钥并使用它进行验证。我可以这样做并在我的身份验证服务器上的测试端点上成功验证,但是我觉得这是不正确的方法
- 我认为另一种更正确的方法是使用令牌中的值在我的项目的 Google 的“/.well-known/openid-configuration/”端点上找到 JWK,即
https://securetoken.google.com/[项目 ID]/.well-known/openid-configuration
检索正确(密钥 ID)的指数和模数kid
并从中创建公钥。
通过执行从 admin SDK 生成的令牌
一些自定义声明看起来像这样:
标题:
有效载荷:
不过,我似乎无法让方法 2 起作用。一个问题是生成的令牌没有 kid
标头,因此不符合 OpenID 规范 (AFAIK),这导致以下两种选择之一:
- 使用上面的第一种方法。但是这会导致问题 - 如果我出于某种原因需要撤销或重置身份验证服务器上的私钥,我需要这样做并将更改也部署到所有其他服务上,从而使解决方案的动态性降低且更容易出错.
- 使用 jwt.io 中提到的库之一手动生成类似的令牌,并将原始 Firebase ID 令牌中的孩子添加到其标头中。
2号问题:
- 那么我应该把什么作为 iss、aud 和 sub 呢?与 admin SDK 的值相同吗?如果是这样,那不是“作弊”吗,因为他们不再是发行人?
- 我已经尝试过了(生成令牌的类似副本,但添加了
kid
原始令牌的副本),但我似乎无法使用为孩子创建的 PEM 密钥验证生成的令牌。
我做后者的方式是这样的(遵循关于该主题的博客指南):
转到https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com并检索相关孩子的模数 (n) 和指数 (e)
使用密钥验证使用“官方”jwt lib
上面的结果是这样的公钥:
-----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAxXpo7ChLMnv1QTovmm9DkAnYgINO1WFBWGAVRt93ajftPpVNcxMT MAQI4Jf06OxFCQib94GyHxKDNOYiweVrHVYH9j/STF+xbQwiPF/8L7+haC2WXMl2 tkTgmslVewWuYwpfm4CoQFV29OVGWCqwEcbCaycWVddm1ykdryXzNTqfzCyrSZdZ k0yoE0Q1GDcuUl/6tjH1gAfzN6c8wPvI2YDhc5gIHm04BcLVVMBXnC0hxgjbJbN4 zg2QafiUpICZzonOUbK6+rrIFGfHpcv8mWG1Awsu5qs33aFu1Qx/4LdMAuEsvX9f EmFZCUS8+trilqJbcsd/AQ9eOZLAB0BdKwIDAQAB -----END RSA PUBLIC KEY--- --
有两件事似乎是错误的。一是密钥与我可以从私钥中提取的密钥不同。另一个是我从私钥中提取的那个有这些注释:
没有'RSA'。这有关系吗?在任何情况下,它都无法验证。
最后,我是不是完全误解了 OpenID 流程?JWK 是否也是从我需要的私钥生成的,以验证我的 JWT?我是否应该在我的身份验证服务器上公开我自己的 JWK 以供其他服务联系和使用,而不是 Google 的?我对 Firebase Admin SDK 做什么和不做什么有点困惑,我想:-)
我知道这是很多问题,但我认为它们都是相关的。
我在研究中依赖的一些资源(当然除了官方的 admin sdk 文档):
api - 后端的 Firebase 令牌验证 - 在“aud”中找不到 firebaseID。而是发送 Google 客户端 ID?
使用 Firebase Admin API 验证从后端服务器的 android 客户端获取的用户身份验证令牌时出现此错误 -
com.google.firebase.auth.FirebaseAuthException:Firebase ID 令牌的“aud”(受众)声明不正确。预期为“xxxxx”,但得到“yyyyy.apps.googleusercontent.com”。确保 ID 令牌与用于验证此 SDK 的服务帐户来自同一个 Firebase 项目。有关如何检索 ID 令牌的详细信息,请参阅https://firebase.google.com/docs/auth/admin/verify-id-tokens 。
我发现 xxxx 是 firebase ID,yyyy 是 Android 应用程序(客户端)的 google-services.json 中的 oAuthClient/clientId。
任何人都知道解决方法(或解决方法)吗?