中间件 Firebase 身份验证说明

Middleware Firebase authentication clarification

我正在使用 express 和 mongoose 设置我的 API 路线。这是进行用户身份验证的安全方法吗?有什么方法可以让用户以某种方式注入另一个 Firebase user.uid 来获取管理员用户的令牌(我正在使用 Firebase 进行身份验证)?

后端:

myRoute.route('/sample/:id').delete((req, res, next) => {

  var user = req['currentUser'];

  UserModel.findById(user.uid, (error, data) => {
    if (error) {
      return next(error)
    } else {
      user = data;
      if (user.admin) {

        SampleModel.findByIdAndRemove(req.params.id, (error, data) => {
          if (error) {
            return next(error)
          } else {
            res.status(200).json({
              msg: data
            })
          }
        })

      } else {
        res.status(403).send('You are not authorised!');
      }
    }
  })
})
async function decodeIDToken(req, res, next) {
              if (req.headers?.authorization?.startsWith('Bearer ')) {

                const idToken = req.headers.authorization.split('Bearer ')[1];

                console.log(idToken);

                try {
                  const decodedToken = await admin.auth().verifyIdToken(idToken);
                  req['currentUser'] = decodedToken;
                } catch (err) {
                  console.log(err);
                }
              }

              next();
            }

前端:

const user = auth.currentUser;
const token = user && (await user.getIdToken());

      axios.delete(`${this.baseApiURL}/sample/${id}`, { headers: {
        'Content-Type': 'application/json',
        Authorization: `Bearer ${token}`,
      }
      }).then(() => {
        console.log("Done");
      })

Is this a secure way to do user authentication?

是的,只需验证 Firebase ID 令牌就足够了。

Is there any way that the user could somehow inject another Firebase user.uid to get the token of an admin user

创建 JWT 非常简单,但您需要知道 Firebase 用于签署令牌的确切签名密钥,否则 verifyIdToken() 将引发错误。