Firebase 3.0 Tokens : [Error: Firebase Auth ID token has no "kid" claim]
Firebase 3.0 Tokens : [Error: Firebase Auth ID token has no "kid" claim]
我目前正在使用 firebase 3.0 开发一项 node.js 服务,该服务由使用 firebase 2.4 的 Web 应用程序调用。
我在 header 调用中发送当前用户 Firebase ID token (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);
});
但我得到:
[Error: Firebase Auth ID token has no "kid" claim]
getAuth():
更新
我刚刚测试了在服务器端生成和验证令牌,我遇到了同样的问题。
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);
});
有什么建议吗?
更新 2:[解决方案]
我的问题是 AngularFire 2.X.X 生成的令牌与服务器中 运行 的 Firebase 3.X.X 不兼容。因此,在深入了解人们在这里和 this google group topic the workaround was to use jsonwebtoken 中写下的一些想法后,如下所示:
var jwt = require('jsonwebtoken');
jwt.verify(idToken, fbKey, function(err, decoded) {
if (!err){ console.log(decoded); }
});
您可以找到 fbKey
访问新的 firebase 控制台并进入 设置 -> 项目设置 -> 数据库。
似乎无法同时使用 firebase 的 createCustomToken 和 verifyIdToken。
方法 createCustomToken 使用 jsonwebtoken 模块中的方法 sign,默认情况下不会将 "kid" 声明放入 jwt 的 header 部分。
而createCustomToken本身并没有放
我想这时候你可以直接使用 jsonwebtoken 模块来生成带有自己密钥 ID 的令牌。
firebase@3.0.2
--jsonwebtoken@5.7.0
您传递给服务器的令牌不是 JWT 令牌,verifyIdToken
需要 JWT 令牌。
在您的网络应用程序中获取 JWT 令牌, 运行 firebase.app().auth().currentUser.getToken()
.
我个人删除了 angularfire,在我看来,基本的 firebase 框架使 angularfire 变得毫无用处。另外,angularfire的firebase 3.0兼容版本还没有发布,可能在the next week according to the firebase team.
文档指出 Firebase ID 令牌与自定义令牌不同,并且 verifyIdToken() 不适用于验证使用 generateCustomToken() 生成的令牌。
旧式自定义令牌似乎仍然有效(使用数据库机密而不是服务帐户私钥签名)。您可以使用 firebase-token-generator.js and/or jsonwebtoken.js.
自己生成和验证这些
从 Firebase 项目 > 设置 > 数据库 > 机密复制
Create custom database authentication tokens using a legacy Firebase
token generator. At least one secret must exist at all times.
我目前正在使用 firebase 3.0 开发一项 node.js 服务,该服务由使用 firebase 2.4 的 Web 应用程序调用。
我在 header 调用中发送当前用户 Firebase ID token (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);
});
但我得到:
[Error: Firebase Auth ID token has no "kid" claim]
getAuth():
更新
我刚刚测试了在服务器端生成和验证令牌,我遇到了同样的问题。
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);
});
有什么建议吗?
更新 2:[解决方案]
我的问题是 AngularFire 2.X.X 生成的令牌与服务器中 运行 的 Firebase 3.X.X 不兼容。因此,在深入了解人们在这里和 this google group topic the workaround was to use jsonwebtoken 中写下的一些想法后,如下所示:
var jwt = require('jsonwebtoken');
jwt.verify(idToken, fbKey, function(err, decoded) {
if (!err){ console.log(decoded); }
});
您可以找到 fbKey
访问新的 firebase 控制台并进入 设置 -> 项目设置 -> 数据库。
似乎无法同时使用 firebase 的 createCustomToken 和 verifyIdToken。
方法 createCustomToken 使用 jsonwebtoken 模块中的方法 sign,默认情况下不会将 "kid" 声明放入 jwt 的 header 部分。 而createCustomToken本身并没有放
我想这时候你可以直接使用 jsonwebtoken 模块来生成带有自己密钥 ID 的令牌。
firebase@3.0.2
--jsonwebtoken@5.7.0
您传递给服务器的令牌不是 JWT 令牌,verifyIdToken
需要 JWT 令牌。
在您的网络应用程序中获取 JWT 令牌, 运行 firebase.app().auth().currentUser.getToken()
.
我个人删除了 angularfire,在我看来,基本的 firebase 框架使 angularfire 变得毫无用处。另外,angularfire的firebase 3.0兼容版本还没有发布,可能在the next week according to the firebase team.
文档指出 Firebase ID 令牌与自定义令牌不同,并且 verifyIdToken() 不适用于验证使用 generateCustomToken() 生成的令牌。
旧式自定义令牌似乎仍然有效(使用数据库机密而不是服务帐户私钥签名)。您可以使用 firebase-token-generator.js and/or jsonwebtoken.js.
自己生成和验证这些从 Firebase 项目 > 设置 > 数据库 > 机密复制
Create custom database authentication tokens using a legacy Firebase token generator. At least one secret must exist at all times.