Firebase 3.0 令牌:[错误:Firebase 身份验证 ID 令牌没有“孩子”声明]

ado*_*srs 6 firebase firebase-authentication

我目前正在开发一个带有 firebase 3.0 的 node.js 服务,该服务由使用 firebase 2.4 的 Web 应用程序调用。

我正在我的标头调用中发送当前用户Firebase ID 令牌( Auth.$getAuth().token) 并尝试使用

var idToken = req.headers["x-access-token"];
auth.verifyIdToken(idToken).then(function(decodedToken) {
    var uid = decodedToken.sub;
    console.log(decodedToken);
}, function(error){
    console.log(error);
});
Run Code Online (Sandbox Code Playgroud)

但我得到:

[Error: Firebase Auth ID token has no "kid" claim]
Run Code Online (Sandbox Code Playgroud)

获取身份验证():

在此处输入图片说明


更新

我刚刚测试了在服务器端生成和验证令牌,我遇到了同样的问题。

var auth = firebase.auth();
var token = auth.createCustomToken(userId, {"premium_account": true});
console.log(token);
auth.verifyIdToken(token).then(function(decodedToken) {
     console.log(decodedToken);
}, function(error){
     console.log(error);
});
Run Code Online (Sandbox Code Playgroud)

有什么建议?


更新 2:[解决方案]

我的问题是使用 AngularFire 2.XX 生成的令牌与我的服务器中运行的 Firebase 3.XX 不兼容。因此,在深入了解人们在此处和此 google group 主题中写的一些想法后,解决方法是使用jsonwebtoken,如下所示:

var jwt = require('jsonwebtoken');
jwt.verify(idToken, fbKey, function(err, decoded) {
   if (!err){ console.log(decoded); }
});
Run Code Online (Sandbox Code Playgroud)

您可以找到fbKey访问新的 firebase 控制台并进入Settings -> Project Settings -> Database

小智 5

该文档指出 Firebase ID 令牌与自定义令牌不同,并且 verifyIdToken() 不适用于验证使用generateCustomToken() 生成的令牌。

旧式自定义令牌似乎仍然有效(使用数据库密钥而不是服务帐户私钥进行签名)。您可以使用 firebase-token-generator.js 和/或 jsonwebtoken.js 自行生成和验证这些。

从 Firebase 项目 > 设置 > 数据库 > 机密复制

使用旧版 Firebase 令牌生成器创建自定义数据库身份验证令牌。任何时候都必须至少存在一个秘密。