我应该将用户信息放入JWT令牌中还是仅输入用户ID,然后从数据库中选择该信息?

时间:2018-08-08 20:19:29

标签: node.js mongodb performance jwt token

由于可以更改用户信息,而不是用户-可以由某些管理员或其他人更改,因此令牌用户信息(有效负载)不会更新为数据库中包含的信息。

但是我想尽可能地减少数据库请求,所以我考虑将用户信息存储在其令牌中。

我认为这是错误的,我最好只存储他们的唯一ID,该ID在MongoDB中是索引,并且带有时间戳-这样用户就不会一遍又一遍地拥有相同的令牌-他必须从服务器登录。 / p>

但是随后我需要对数据库进行查询,并且我想尽可能地减少数量。

我应该只使用用户ID来查询数据库吗?

3 个答案:

答案 0 :(得分:0)

如果您愿意与使用令牌的用户公开共享用户ID,则可以将其包含在JWT中。但是,您不应在令牌中包含任何用户可能会在系统中滥用的信息。 -例如ID可能会暴露下划线的实现细节。

根据经验,如果您不将存储在JWT中的数据提供给用户,则不要将其存储在JWT中,因为JWT就像用户可以解码Base64一样。 / p>

另外,根据您在客户端存储JWT的方式,我限制了sensitive data的存储量,因为客户端上运行的任何JavaScript都可以访问它。

https://auth0.com/docs/security/store-tokens#web-storage-disadvantages

  

可通过同一域上的JavaScript访问Web存储,因此,您网站上运行的所有JavaScript都可以访问Web存储,因此,它很容易受到跨站点脚本(XSS)攻击。

答案 1 :(得分:0)

我建议您只发送userId,也许是令牌的创建和到期日期

答案 2 :(得分:0)

存储ID可能是一个更好的主意,因为可以像您所说的那样修改用户数据。 此外,JWT中的较大有效载荷会导致针对几乎每个网络请求通过网络发送额外的字节。 在大多数情况下,您不需要整个用户数据,并且ID在大多数情况下会很好。 因此,我建议在JWT中存储ID(也可以根据需要在其他字段中存储ID),而不是存储所有用户数据。