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 令牌生成器创建自定义数据库身份验证令牌。任何时候都必须至少存在一个秘密。
| 归档时间: |
|
| 查看次数: |
4856 次 |
| 最近记录: |