使用Node.js-Express后端在JWT中存储机密信息

使用Node.js-Express后端在JWT中存储机密信息,node.js,security,jwt,Node.js,Security,Jwt,我正在开发一个Angular web应用程序,它通过RESTful API与其后端进行通信。目前我正在使用JWTs存储状态(当前用户ID等)。我使用jsonwebtoken和passport jwt包在Node.js-Express应用程序中实现jwt 有时,我可能需要在状态中存储一些与会话相关的信息(例如,秘密加密密钥),但用户不应该知道这些信息 由于JWT有效负载是经过签名但未加密的,其内容对任何想要解码它的人都是显而易见的,因此直接在有效负载中存储机密内容是不合适的。虽然我可以对整个JWT

我正在开发一个Angular web应用程序,它通过RESTful API与其后端进行通信。目前我正在使用JWTs存储状态(当前用户ID等)。我使用jsonwebtoken和passport jwt包在Node.js-Express应用程序中实现jwt

有时,我可能需要在状态中存储一些与会话相关的信息(例如,秘密加密密钥),但用户不应该知道这些信息


由于JWT有效负载是经过签名但未加密的,其内容对任何想要解码它的人都是显而易见的,因此直接在有效负载中存储机密内容是不合适的。虽然我可以对整个JWT字符串或有效负载中的秘密变量值实现某种自制的加密,但我正在寻找“正确”或“传统”的方法来处理此问题。

最好的方法是将其仅存储在后端的某种持久存储中,最好是散列存储

如果这是不可能的,那么您可以存储在JWT中,但是您需要在将数据放入JWT之前对其进行加密


Bcrypt可能是最简单的解决方案,它仍然是安全的。请注意,您想要的安全性越高,加密速度就越慢

bcrypt不仅仅是一种散列方法,而不是一种加密方法吗?似乎OP需要一个不同的解决方案。我想知道“不应该被知道”部分-如果用户发现了该信息是否存在危险?具体的例子是双因素身份验证,其中代码基于服务器端生成的秘密种子,并通过其他媒体(例如,sms消息)传递给用户。这段数据必须以状态保存,但在API通信中不应可见。