Firebase 3.0令牌:[错误:Firebase身份验证ID令牌没有"孩子"要求]

时间:2016-05-21 01:50:38

标签: firebase firebase-authentication

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

我在我的标头通话中发送当前用户Firebase ID token[undefined, undefined, Scope] jasmine-specs.js:63717 [Array[0], undefined, Scope] jasmine-specs.js:63717 [Array[1], undefined, Scope] )并尝试使用

验证此令牌
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);
});

getAuth():

enter image description here

更新

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

[Error: Firebase Auth ID token has no "kid" claim]

有什么建议吗?

更新2:[解决方案]

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

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);
});

您可以找到var jwt = require('jsonwebtoken'); jwt.verify(idToken, fbKey, function(err, decoded) { if (!err){ console.log(decoded); } }); 访问新的firebase控制台并进入设置 - >项目设置 - >数据库

3 个答案:

答案 0 :(得分:3)

好像没有办法在一对夫妇中使用firebase的createCustomToken和verifyIdToken。

方法createCustomToken使用来自jsonwebtoken模块的方法sign,默认情况下不会在jwt的header部分中放入“kid”声明。 而createCustomToken并没有把它自己。

我想,此时您可以直接使用jsonwebtoken模块生成具有自己密钥ID的令牌。

firebase@3.0.2

- jsonwebtoken@5.7.0

答案 1 :(得分:2)

传递给服务器的令牌不是JWT令牌,而verifyIdToken需要JWT令牌。

要在您的网络应用中获取JWT令牌,请运行firebase.app().auth().currentUser.getToken()

我个人移除了angularfire,基本的firebase框架使得angularfire在我看来毫无用处。此外,还没有发布带有firebase 3.0 of angularfire的兼容版本,可能是the next week according to the firebase team

答案 2 :(得分:2)

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

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

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

  

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