Spring 安全 - 被盗的 JWT 令牌

Spring Security - Stolen JWT token

使用 Spring 安全性JWT:

谢谢

我将尽可能简单地回答这个问题,而不会试图进行全面的讨论。

Is there a way to invalidate the token if it's from a different device?

没有。这是您不应该将 JWT 用作会话的主要原因之一。它们被发布,然后最常见的是通过检查签名来验证它们的完整性,然后仅此而已。

会话 cookie 存储了所有信息 server-side,这意味着您可以在服务器端使会话无效,并且当有人出示 cookie 时您可以拒绝。

令牌具有您可以检查的生命周期,但由于大多数实现都是无状态的,我们无法使服务器端失效,因此我们无法使 JWT 失效。它必须“超时”。

可能有自定义解决方案等,但所有主要实现都是这样工作的。 Owasp 谈论不同的解决方案 built in token revocation

这个问题已经提过好几次了,但是开发者似乎并不在意。

JWTs are dangerous for user sessions

Stop using JWT for sessions

Stop using JWT for sessions part 2

Why JWTs suck as session tokens

How am I supposed to know whether the token provided is a stolen one ? I can easily copy and paste the entire token and provide it

你不能。你怎么知道有人盗用了你的 Facebook 帐户?好吧,您向 Facebook 报告它已被黑客入侵。单凭代币是无法随时知道谁拥有任何代币的。

这就是为什么我们有证书 (TLS),我们有其他安全措施,如 CORS、CSRF、ip 白名单、用户名和密码等。

这就是所谓的零信任 如果有人出示令牌,您就相信他们就是他们声称的那个人,除非您想开始加入白名单IP-address (但它们可以被 vpns 等欺骗)

安全很困难,遗憾的是您现在已经了解了它的困难。

令牌窃取是一回事,您必须专注于确保没有人可以窃取令牌。