jsonwebtoken:什么是有效载荷

ili*_*lia 2 payload node.js express jwt

我想使用 json web 令牌来验证用户,我即将使用 jwt.sign 方法,但是根据维基百科有效负载定义(在计算中),“有效负载”术语让我感到困惑:

在计算和电信中,有效载荷是作为实际预期消息的传输数据的一部分。发送标头和元数据仅用于启用有效负载传送。[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);
        }
      });
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

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

Sov*_*iut 7

在 JSON Web Tokens 中,payload 是一组要包含在生成的令牌中的字段;你的 API 需要的东西,比如,为特定用户获取正确的数据。

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

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

{
  user_id: 303,
  account_id: 909,
  email: 'joe@example.com',
  full_name: 'Joe Blow',
  default_language: 'en_US'
}
Run Code Online (Sandbox Code Playgroud)

警告:有效载荷是加密的,因此要确保你没有保存的东西像密码,密钥,信用卡号码,银行账户余额等在里面。只应存储您在 URL 或公钥中看到的 ID 等标识符。

此外,有效负载会影响令牌的总长度(更多数据意味着更长的令牌),因此您只想包含最重要的数据片段。否则,您将在每个消耗带宽的请求上发送一个非常大的令牌,并且理论上会占用更多的服务器资源来解码。

最后,JWT 是无状态的,这意味着它们不是会话。因此,不要包含任何频繁更改的数据,例如游戏分数、上次登录等。