我正在用Spring构建一个站点,它需要身份验证才能访问某些页面。
该站点实际上由一个呈现视图和处理数据绑定的客户端主机和一个REST主机(也是用Spring构建的)组成,它的责任是返回/操作数据、验证/生成用户令牌等。
我决定在REST端实现自定义身份验证,在接收到有效的用户名和密码后,它将返回:
我能想到的唯一后门是,如果攻击者窃取了cookie,我就可以为该cookie向JWT有效负载添加一个唯一的随机值(存储在数据库中),如果用户怀疑他的会话被窃取,他可以发出重置唯一值的请求,使被盗的令牌毫无用处。
我是否遗漏了任何允许攻击者轻松绕过身份验证的后门?我是否应该使用Security来代替?恐怕我无法实现我目前的无国籍行为.
谢谢!
发布于 2017-03-28 21:04:41
你将很容易受到CSRF的攻击。
由于您希望成为无状态的,最好的选择是使用双提交曲奇变体。您需要小心,不要天真地去做,请看这问题。简而言之,您需要将CSRF令牌绑定到安全会话:
您的撤销JWT的解决方案很好。确保在用户更改密码时生成新id并发出新令牌。
为了最小化被盗的JWT可能对应用程序造成的影响,请尽可能缩短过期时间。
您可以使用security来实现无状态的JWT安全性,并且应该避免在REST控制器中这样做,并滚动您自己的自定义实现。将这视为一个良好的起点。尽管它是针对Spring的,但它可以很容易地被修改,因此它可以与普通Spring一起工作。
https://security.stackexchange.com/questions/155160
复制相似问题