【HTTP】JWT - 防止令牌被非法获取后用于非法操作 和 踢出未过期的用户

防止非法注入和提高安全性(两种主要措施)

  1. 设置过期时间:为每个JWT设置一个合理的过期时间(exp 声明),这样即使令牌被泄露,它的有效性也是有限的。

  2. 使用刷新令牌:为了减少主令牌泄露的风险,可以实现一个短期有效的访问令牌和长期有效的刷新令牌系统。访问令牌用于日常请求,而刷新令牌则用于获取新的访问令牌。

踢出尚未过期的用户

  • 黑名单机制:当需要立即注销某个用户的会话时,可以将该用户的JWT添加到黑名单数据库中。服务器在验证每个请求之前,都会检查该令牌是否存在于黑名单中,如果存在,则拒绝请求并可能返回一个错误消息提示用户重新登录。

  • 刷新令牌撤销:如果实现了刷新令牌机制,可以在用户被踢出时撤销其刷新令牌。这将阻止用户获取新的访问令牌,从而有效地结束他们的会话。

  • Redis中存储token,实现步骤如下:

    • 1.生成Token时记录:当用户成功登录或刷新令牌时,除了生成新的JWT外,还将该JWT与用户的ID关联起来存储在Redis中(过期时间和token保持一致)。例如,可以使用用户的ID作为键,JWT作为值。

    • 2.请求拦截:在每次处理涉及认证的请求前,先解析请求中的JWT,从JWT中提取用户ID。

    • 3.查询Redis:使用从JWT中提取的用户ID作为键,查询Redis中存储的对应JWT。

    • 4.比较JWT:将请求中的JWT与Redis中存储的JWT进行比较。如果两者匹配,则认为该请求合法,允许继续处理;如果不匹配或Redis中不存在该用户ID对应的JWT,说明用户已被踢出或存在其他异常情况,应拒绝请求并提示用户重新登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值