我使用 JWT 在 Laravel 中通过 HTTP 实现了无状态身份验证。
- 我从前端发送我的用户名/密码。
- 服务器对用户进行身份验证,发回带有到期时间的签名 JWT。
- 我正在使用 HS512 算法使用私钥进行签名(仅对服务器可用)。
- 前端存储令牌以供将来请求。
- 前端发送包含令牌的下一个请求。
- 服务器验证令牌是否有效且未过期,如果两者都是,则让操作继续。
- 当令牌过期时,服务器会发送一条“注销”消息。
所有这些通信都通过 HTTPS 进行。
所以我可以从以下几点看出这是安全的:
- 由于 HTTPS,攻击者无法嗅探流量并窃取 JWT 令牌。
- 攻击者无法生成和发送任何奇怪的令牌,因为服务器使用其私钥验证签名。
- 攻击者无法修改发出请求的用户(以及请求者的角色和权限),因为
sub
这是令牌中声明的一部分。
但是,我有两个问题:
- 如果用户的计算机或移动设备上存在病毒,并且它从 RAM 或浏览器中窃取了有效令牌怎么办。然后它可以发送更多请求,并且它们将被接受。有什么办法可以防止这种情况发生吗?
- 还有另一种我没有看到的攻击这个系统的方法吗?