要存储jwt令牌未解码的服务器端或不?

原谅我,如果这是一个愚蠢的问题。

正如标题所要求的,为每个请求解码令牌服务器端是不是很昂贵,存储和查找未解码的令牌不是更好吗? 你会将会话令牌存储在nodejs对象或mongodb中吗? Mongodb将是另一次往返,但是你可以使用_id轻松地find(请纠正我,如果我错了,我正在学习,所以我build议/资源=非常欢迎!)

这取决于

只是validation签名意味着确保令牌是用您的密钥生成的。

存储和检查令牌意味着您可以validation令牌是由服务器创build的。 这样,您也可以使个人令牌失效,例如,如果用户丢失了他/她的电话,他/她可以使其失效。

Key-value数据库(如Redis)通常用于这种存储,因为它们对于这些简单的put / get操作performance得非常好,每秒钟可以执行数十万次操作。

现在存储在哪里? 如果在cookie中,您不需要以解码的forms将其存储在其他地方。 访问像mongo这样的外部存储总是比从base64或者json中解码更昂贵。

同时,如果它根本不存储(只用于获取访问权限),则不能将其存储在任何地方,因为JWT令牌就像密码。 你必须避免将这些东西存储在数据库中。