jsonwebtoken:啥是有效载荷

Posted

技术标签:

【中文标题】jsonwebtoken:啥是有效载荷【英文标题】:jsonwebtoken: what is payloadjsonwebtoken:什么是有效载荷 【发布时间】:2019-07-30 21:11:32 【问题描述】:

我想使用 json 网络令牌来验证用户,我即将使用 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);
        
      );
    
  );
);

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

【问题讨论】:

【参考方案1】:

在 JSON Web Tokens 中,有效负载是您希望包含在生成的令牌中的一组字段;例如,您的 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 是无状态的,这意味着它们不是会话。所以不要包含任何频繁变化的数据,例如游戏分数、上次登录等。

【讨论】:

它必须是用户标识符或者它可以是任何东西,例如随机字符串? @Jake 它可以是你想要的任何东西。请参阅我添加的用户 full_name 示例。 我应该包括这种数据吗? @Jake 再次,我已经在答案中解决了这个问题。您应该在 API 中包含正确识别用户所需的最少信息,仅此而已。大多数 JWT 都包含一个用户 ID,仅此而已。 啊。了解,我使用的是唯一的用户名,所以我认为就足够了

以上是关于jsonwebtoken:啥是有效载荷的主要内容,如果未能解决你的问题,请参考以下文章

http中的净荷 payload(有效载荷有效负载)是什么?

有效载荷 4096 字节是不是包含registration_id 长度?

修改有效载荷的 Alamofire 重试请求

BTLE 4.0 有效载荷

iPhone 在 App 中推送有效载荷信息

NGRX/Store 有效载荷类型混淆