【问题标题】:Verify clients Firebase token at node.js server在 node.js 服务器上验证客户端 Firebase 令牌
【发布时间】:2023-03-20 21:10:02
【问题描述】:

我正在实现一个 node.js 服务器,使用 express.js 进行 REST 和 Firebase 进行数据存储。

我读过Using NodeJs with Firebase - Security,它可以用这种方式实现,但在我的情况下,我需要向服务器发送数据,服务器必须返回一个重定向地址,所以使用firebase作为通信通道有点复杂。

我目前正在通过发送 Firebase 身份验证令牌作为查询参数并使用 firebase auth() 方法检查授权来验证服务器上的客户端身份。

dataRef.auth(CLIENT_TOKEN, function(error) {
  if(error) {
    console.log("Login Failed!", error);
  } else {
    console.log("Login Succeeded!");
  }
}); 

问题是,在服务器中我还需要 firebase“管理员”权限。为此,我需要使用管理员令牌使用 firebase auth() 再次进行身份验证。 (由 firebase-token-generator 生成)

var FirebaseTokenGenerator = require("firebase-token-generator");
var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET);
var token = tokenGenerator.createToken({some: "arbitrary", data: "here"});

我注意到 auth() 方法有一个限制:

请注意,对 Firebase 的所有引用共享相同的身份验证状态。因此,如果您调用 new Firebase() 两次并在其中一个上调用 auth(),它们都将通过身份验证。

有没有办法在不调用 auth() 两次的情况下实现这一点?

或者有更好的解决方案吗?

【问题讨论】:

  • 您可以使用 REST API 快速检查某人是否拥有有效令牌。有一种方法可以将两个 Firebase 引用相互隔离,但它没有记录,所以我不推荐它。
  • 哦,你是说firebase REST API!我会检查那个。但是如何使用github.com/hokaccha/node-jwt-simple 解码发送到服务器的令牌并检查谁是所有者?
  • 是的,使用通用 JWT 库来解码令牌肯定会起作用!

标签: node.js firebase


【解决方案1】:

基于 cmets 并在实现之后,似乎最好的解决方案是使用通用 JWT 库,例如: https://github.com/hokaccha/node-jwt-simple

借助库,您可以使用 firebase 密码解码令牌:

// decode
var decoded = jwt.decode(token, secret);
console.log(decoded); //=> {"v":0,"iat":1359943067,"d":{"id":"user@fb,com"}}

解码后的令牌包含 iat(发布于),可能包含 exp(过期)。如果没有提供 exp,firebase 令牌的默认过期时间是 24 小时。您需要检查令牌是否已过期。

更多详情请访问: https://www.firebase.com/docs/security/custom-login.html

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 2017-10-30
    • 1970-01-01
    • 2020-07-31
    • 2020-06-09
    • 2022-08-16
    • 2019-12-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多