JWT有效载荷中应该包含多少信息



我正在用Mean堆栈构建一个闪卡应用程序,并试图模仿本教程中遵循的过程https://thinkster.io/mean-stack-tutorial#wiring-一切就绪。

当一个新用户注册时,我想在用户对象中返回该用户的信息:正在研究的当前和最近一副抽认卡,正在研究的最新和当前卡片,等等

我的问题是,这些信息中有多少应该进入JWT有效载荷?

在thinkster.io教程中,JWT的有效载荷仅包含user_ID、用户名和到期日期。我担心额外的信息是否不应该进入JWT,因为这会使JWT变得太大。然后,我是否只将JWT和一个用户对象一起发送回,该对象在使用mongoose.save方法保存用户后返回?这个策略听起来像是符合以下引用:

https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/#token-尺寸

每次发出API请求时,都必须在授权标头。

根据您在该令牌中存储的信息量,它可能做大。另一方面,会话cookie通常只是标识符(connect.sid、PHPSSID等)和其余内容存在于服务器上(如果您只有一个服务器或数据库(如果在服务器场上运行)。

现在,没有什么可以阻止您使用代币。令牌将具有所需的基本信息在服务器端,您可以在每个API调用上使用更多数据来丰富它。这与cookie的作用完全相同,不同之处在于你还有一个额外的好处,那就是这是一个有意识的决定,您可以完全控制,并且是代码的一部分。

我试图从thingster.io中模仿的/register路由代码如下:

router.post('/register', function(req, res, next){
  if(!req.body.username || !req.body.password){
    return res.status(400).json({message: 'Please fill out all fields'});
  }
  var user = new User();
  user.username = req.body.username;
  user.setPassword(req.body.password)
  user.save(function (err){
    if(err){ return next(err); }
    return res.json({token: user.generateJWT()})
  });
});

我可以编辑底部的保存方法部分,使其看起来像这样吗:

user.save(function (err, user){
    if(err){ return next(err); }
    return res.json({token: user.generateJWT(), 
                     user: user})
  });

还是应该将所有额外的用户信息都输入JWT,只有JWT才能返回?

您需要根据您的安全需求使用。

例如,对于我的应用程序,我确实以您为例。令牌存储在客户端cookie中,在身份验证中,我做一件事:

  • 解码JWT并用_id和另一个主键填充request.user
  • 发回令牌和用户信息

相同的用户信息可以在API调用中公开。需要注意的一件重要事情是,我的系统不需要总是更新和同步。因此,我的客户端用户只会在登录时根据特定的GET请求获取用户数据。

你不需要在JWT里混很多垃圾。它还需要解码。

相关内容

  • 没有找到相关文章

最新更新