Node.js 如何在后端验证firebase管理员

Node.js 如何在后端验证firebase管理员,node.js,firebase,express,firebase-authentication,firebase-admin,Node.js,Firebase,Express,Firebase Authentication,Firebase Admin,我正在尝试在express服务器中实现中间件,该服务器在传入请求上设置自定义uid/admin头。该修改后的请求将在中间件之后使用,以查看经过身份验证的用户/管理员是否正在访问该特定资源 要为客户端执行此操作,我只需获取授权头上的令牌,并将其输入firebase admin api的verifyIdToken方法。如果存在uid,则设置标题。例如: app.use((req, res, next) => { /* get rid of headers sent in by malici

我正在尝试在express服务器中实现中间件,该服务器在传入请求上设置自定义uid/admin头。该修改后的请求将在中间件之后使用,以查看经过身份验证的用户/管理员是否正在访问该特定资源

要为客户端执行此操作,我只需获取授权头上的令牌,并将其输入firebase admin api的verifyIdToken方法。如果存在uid,则设置标题。例如:

app.use((req, res, next) => {
  /* get rid of headers sent in by malicious users. */
  delete req.headers._uid;
  try {
    const token = req.headers.authorization.split(' ')[1];
    _dps.fb_admin.auth().verifyIdToken(token).then(claims => {
      if (claims.uid) { req.headers._uid = claims.uid; }
      next();
    }).catch(err => next());
  } catch(err) { next(); }
});
两个问题:

1) 作为在另一台服务器上拥有服务帐户的管理员,我如何向该服务器发送请求,以便该服务器能够确定发送该请求的管理员

2) 如何识别此服务器上的管理员

  • 您需要创建自己的自定义Firebase令牌,以便在JWT中包含自定义字段,如
    isAdmin:true
    。看

  • 见(1)


  • 使用向所有管理员用户帐户添加一个特殊的“admin”声明,并在验证ID令牌时进行检查。您可以找到此用例的讨论和演示(跳到录制的6:45处)。

    也许解决方案是简单地生成一个长度合适的API密钥,并将其设置为我的每个服务器上的环境变量。然后,每当我想要发出管理员https请求时,我就可以在授权头中发送这个消息,并通过执行简单的字符串比较在接收方的中间件中验证它。唯一能看到此API密钥的人是那些可以访问我的服务器(也称为管理员)的人。如果这种方法有问题,请告诉我。这看起来确实很简单。

    这假设我想拥有具有管理员角色的帐户,而我没有。我正在寻找使用服务帐户的方法。这应该是可能的,因为我可以使用node admin api向RTDB写入,RTDB知道是管理员请求写入。是的,但创建令牌后,我需要使用客户端sdk登录并获取生成的id令牌。如果我错了,请纠正我,但我认为我无法使用node admin sdk登录。第一部分正确,第二部分正确。AdminSDK不使用客户端SDK身份验证方法。您将使用此处指定的
    服务帐户
    :我知道如何使用服务帐户初始化sdk。我只是不确定这如何解决我的问题:/。