jsonwebtoken:什么是有效负载

时间:2019-03-08 19:39:38

标签: node.js express jwt payload

我想使用json网络令牌来验证用户,并且我将使用jwt.sign方法,但是根据Wikipedia有效负载定义(在计算中),“有效负载”一词使我感到困惑:

  

在计算和电信中,有效载荷是传输的数据部分,是实际的预期消息。仅发送报头和元数据以启用有效负载传递。[1] [2]

但根据中间代码

    const jwt = require('jsonwebtoken');
app.post('/api/authenticate', function(req, res) {
  const { email, password } = req.body;
  User.findOne({ email }, function(err, user) {
    if (err) {
      console.error(err);
      res.status(500)
        .json({
        error: 'Internal error please try again'
      });
    } else if (!user) {
      res.status(401)
        .json({
         error: 'Incorrect email or password'
        });
    } else {
      user.isCorrectPassword(password, function(err, same) {
        if (err) {
          res.status(500)
            .json({
              error: 'Internal error please try again'
          });
        } else if (!same) {
          res.status(401)
            .json({
              error: 'Incorrect email or password'
          });
        } else {
          // Issue token
          const payload = { email };
          const token = jwt.sign(payload, secret, {
            expiresIn: '1h'
          });
          res.cookie('token', token, { httpOnly: true })
            .sendStatus(200);
        }
      });
    }
  });
});

payload是用户提供的用于身份验证的电子邮件,这让我感到困惑,如果有人在jwt.sign()中解释什么是有效载荷以及有效载荷的作用,我将感到非常高兴

1 个答案:

答案 0 :(得分:1)

在JSON Web令牌中,有效负载是要包含在所生成的令牌中的一组字段;您的API需要做的事情,例如,为特定用户获取正确的数据。

这只是一个简单的JSON对象,通常用于包含用户标识详细信息,例如用户ID,帐户ID或电子邮件地址。但是,它也可以包含您可能需要的任何任意数据,例如用户的全名,语言首选项等。

示例有效负载可能如下所示,假设这些是API用来获取有关令牌所属用户/帐户的详细信息的字段。注意,这将被认为是相当大的有效载荷;大多数有效负载只有一个用户ID字段,因为通常所有端点都需要正确识别用户。

{
  user_id: 303,
  account_id: 909,
  email: 'joe@example.com',
  full_name: 'Joe Blow',
  default_language: 'en_US'
}

警告:有效负载未加密,因此请确保您未在​​其中存储密码,密钥,信用卡号,银行帐户余额等内容。只能存储您在URL或公共密钥中看到的ID之类的标识符。

此外,有效负载对令牌的总长度有所贡献(更多数据意味着更长的令牌),因此您只想包括最基本的数据。否则,您将在每个请求上发送一个非常大的令牌,这会占用带宽,并且从理论上讲会占用更多服务器资源进行解码。

最后,JWT是无状态的,这意味着它们不是会话。因此,请勿包含任何经常变化的数据,例如比赛得分,上次登录等。