JWT 有多安全?

How safe is JWT?

为了我的项目的安全性,我正在学习 JWT,但我有一个问题。如果我在登录后正确收到令牌,但其他地方的其他人(黑客)窃取了这个特定令牌,他可以访问我的会话吗?使用 JWT 身份验证的服务器能够检测到这一点并保护我吗?怎么样?

只有服务器应该知道用于生成 JWT 的 "secret"。如果有人修改了 JWT 中包含的数据,服务器将无法对其进行解码。因此服务器可以信任它可以解码的任何 JWT。

但是,如果黑客可以访问您的计算机,他们可以看到存储在浏览器中的 JWT 并使用它。存在同样的威胁 w/cookies,因此它并不是 JWT 的真正缺陷。

减轻这种威胁的一种方法是 JWT 的到期日期。对于银行应用程序,您的 JWT 可能会在几分钟后过期。对于 Facebook,它可能会在几个月后过期。但是,如果有人可以访问您的浏览器,则没有防弹解决方案。

黑客的另一种方法是 "man in the middle" 攻击以拦截客户端和服务器之间的网络流量并到达 cookie/JWT。 cookie/JWT 应始终通过 HTTPS 发送以防止出现这种情况。

重要编辑

最后,回答你标题中的问题,"How safe is JWT?":这取决于你如何存储令牌。本地存储不如使用 cookie 安全(reference) but cookies can be subject to CSRF or XSRF 漏洞。

这个答案曾经说 JWT 比 cookie 更安全,因为 cookie 容易受到 CSRF 攻击。但是将 JWT 存储在本地存储中也不安全。因此,我不再将我的 JWT 存储在本地存储中并使用众所周知的技术来减轻 CSRF 攻击。