【发布时间】:2020-01-03 14:14:27
【问题描述】:
我正在为 Android 和 IOS 应用程序使用 firebase。该应用程序具有专用的后端,并使用verifyIdToken 方法在电话/电子邮件身份验证后验证firebase 颁发的令牌。我正在验证新用户注册的令牌。这个概念适用于 android 应用程序。当新用户Authenticates 时,将使用 Firebase 颁发的令牌调用注册 API,我正在使用 Service Account 验证该令牌。但是,对于 ios,它会失败,但 kid 标头无效。这是异常跟踪。
A key with ID "3494b1e786cdad092e423766bbe37f54ed87b22d" could not be found.
{"exception":"[object] (Firebase\\Auth\\Token\\Exception\\UnknownKey(code: 0):
A key with ID \"3494b1e786cdad092e423766bbe37f54ed87b22d\" could not be found.
at /home/fgx3uhiothty/public_html/vendor/kreait/firebase-tokens/src/Verifier.php:132)
在 Firebase Auth 文档中,明确指出
kid Key ID 必须对应于https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 列出的公钥之一
当我在解码令牌后用谷歌的公钥检查密钥3494b1e786cdad092e423766bbe37f54ed87b22d时,我没有找到匹配的kid。但是,来自 ios 设备的令牌是在成功验证后由 firebase 本身发出的。那么如何在 ios 令牌中有不同的 kid 标头?
我正在使用 kreait/firebase-tokens-php 库从后端访问服务帐户 API。
【问题讨论】:
-
感谢您撰写本文并在此分享 - 在过去几周内仅向我报告了几次该问题,但通常足以降低某种错误配置的可能性。由于我自己没有办法测试/重现这个,也许@frank-van-puffelen 对此主题有一些见解或想法?到目前为止,我的假设是公钥在 ID 令牌发行后轮换,但我认为这非常非常罕见。
-
天哪,你明白了,公钥错误,请注意android令牌的
kid标头是正确的。 ios发生在我身上。这种错误会影响已部署的系统,我失去了大约 2k 用户。当我检查后端仪表板时,只有 6.7k 注册用户并且在 firebase auth 上,计数为 8.4k。表示有这么多用户通过了身份验证,但由于令牌验证错误而无法完成注册。 -
已解决,
Firebase Docs不正确。哈哈 -
@Kiran Maniya。你是怎么解决的?如何更改 firebase 文档?你的意思是,谷歌公钥网址不正确?一定要这样吗?
https://www.googleapis.com/service_accounts/v1/metadata/x509/my_firebase_service_account -
@devcrazy 下面详细解答,还是解决不了,欢迎联系我。
标签: php firebase firebase-authentication jwt token