前端如何保护 JWT 令牌

问题描述 投票:0回答:1

我正在使用 NextJS 和 Spring Boot 开发一个应用程序。我在 Spring Security 中使用 JWT 身份验证,因此我创建了一个端点来接受用户的凭据并在成功登录尝试后返回 JWT 令牌。

但是,现在我想知道在前端存储令牌的最佳方式是什么,我应该使用刷新令牌机制吗?

我读过很多关于这方面的文章,每次读另一篇文章时我都会更加困惑,以下是我的想法:

  1. 我知道我需要将请求标头中的令牌作为不记名令牌发送,所以我认为我无法将其存储在cookie中。
  2. 因此,我的选择是会话存储和本地存储,并且由于其寿命长,我认为本地存储更适合这种情况。
  3. 我认为可以在存储之前对令牌进行加密,这样即使令牌被盗也无法使用
  4. 所以我要做的就是制作一个组件来解析令牌,如果令牌没有过期,用户将能够访问内容。

毕竟,我读到将其存储在本地存储中可能会导致 XSS 攻击,但是 NextJS 是否已经清理了来自 XSS 攻击的用户输入?那么我的方法足够安全吗?

next.js jwt refresh-token
1个回答
0
投票

无法在浏览器中安全地存储 JWT,这就是为什么您不应该使用 JWT 作为会话的原因之一。

JWT 不应该分发给浏览器,因为您已经看到它们可以通过 XSS 攻击被窃取,您无法注销用户,您无法注销所有设备,令牌可以在中间人攻击中被窃取,用于 CSRF 攻击,这样的例子不胜枚举。

仅仅因为您可以免受 XSS 攻击,并不意味着您可以免受其他攻击。

而且,仅仅因为你现在安全了,并不意味着明天你也会安全。如果第三方依赖项存在漏洞怎么办?那不是你的代码。

真正的安全性在前端和后端之间使用 cookie,然后将 cookie 交换为后端微服务之间内部使用的令牌。

遗憾的是,大多数在浏览器中使用 JWT 的人/教程从未构建过真正的安全性。

© www.soinside.com 2019 - 2024. All rights reserved.