【发布时间】:2021-06-25 07:37:45
【问题描述】:
我有一个返回的登录路径:
- 带有 jwt 负载的 cookie:user.id 和 user.locale
- 带有用户对象的 json 响应。
此用户对象包含敏感信息,例如地理位置、电子邮件等。此响应存储在 react 全局状态中并由浏览器缓存。它永远不会暴露在本地/会话存储中。
在将用户对象发送到客户端之前,我是否需要在 jwt 中加密用户对象?还是根本没有区别,用纯json发送就够了?
代码如下所示:
const token = AuthControler.generateToken(user);
const encryptedUser = AuthControler.encryptUser(user);
return res
.status(200)
.cookie("myapp", token, {
expires: new Date(Date.now() + msPerDay * 14),
httpOnly: true,
secure: true
})
.json({ user: encryptedUser });
【问题讨论】:
-
没有区别。如下所述,JWT 并没有真正“加密”数据并且不安全。相反,请确保您仅使用 HTTPS 连接 - 这将真正加密通过服务器和客户端之间的线路发送的所有数据。如果您需要将数据保存在客户端但对它不透明(即客户端无法解密数据),那么您将在传输之前由服务器单独安全地加密该数据。如果您需要数据安全但客户端可读,只需使用HTTPS。
-
谢谢。因此,使用 bcrypt 加密令牌并使用 https 连接比使用 jwt 更好。但是,如果可以使用加密库和 http-only cookie 实现适当的安全级别,那么 jwt 的目的是什么?
-
JWT 让人们确信其中的内容是有效的、未更改的以及他们所说的来自谁。这是因为它们是加密的签名,这与加密不同。一个常见的用例是服务器在使用授权令牌登录时提供 JWT。用户/客户端无法更改 JWT 的内容,因为如果他们这样做了,加密签名将不再有效。这使服务器更加确信带有 JWT 的请求来自有效的授权用户。 jwt.io/introduction
标签: javascript node.js reactjs security jwt