防止非法注入和提高安全性(两种主要措施)
-
设置过期时间:为每个JWT设置一个合理的过期时间(
exp
声明),这样即使令牌被泄露,它的有效性也是有限的。 -
使用刷新令牌:为了减少主令牌泄露的风险,可以实现一个短期有效的访问令牌和长期有效的刷新令牌系统。访问令牌用于日常请求,而刷新令牌则用于获取新的访问令牌。
踢出尚未过期的用户
-
黑名单机制:当需要立即注销某个用户的会话时,可以将该用户的JWT添加到黑名单数据库中。服务器在验证每个请求之前,都会检查该令牌是否存在于黑名单中,如果存在,则拒绝请求并可能返回一个错误消息提示用户重新登录。
-
刷新令牌撤销:如果实现了刷新令牌机制,可以在用户被踢出时撤销其刷新令牌。这将阻止用户获取新的访问令牌,从而有效地结束他们的会话。
-
Redis中存储token,实现步骤如下:
-
1.生成Token时记录:当用户成功登录或刷新令牌时,除了生成新的JWT外,还将该JWT与用户的ID关联起来存储在Redis中。例如,可以使用用户的ID作为键,JWT作为值。
-
2.请求拦截:在每次处理涉及认证的请求前,先解析请求中的JWT,从JWT中提取用户ID。
-
3.查询Redis:使用从JWT中提取的用户ID作为键,查询Redis中存储的对应JWT。
-
4.比较JWT:将请求中的JWT与Redis中存储的JWT进行比较。如果两者匹配,则认为该请求合法,允许继续处理;如果不匹配或Redis中不存在该用户ID对应的JWT,说明用户已被踢出或存在其他异常情况,应拒绝请求并提示用户重新登录。
-