jwt 如何防止token被拦截_JWT认证中如何防止他人冒充token?

JWT 是明文签名方案,也就是你在 JWT 中存储的所有东西都是明文(base64 编码)的,加上 secret 使用 HMAC 算法获取摘要签名,通过签名来检查这个 JWT 是否被篡改。

所以 JWT 通常是一次签发,永久有效的。

为了避免这个问题,通常会在 JWT 的数据中放入一个过期时间,虽说是明文放进去的,但是受签名限制,无法篡改。这样,服务端在检查 JWT 是否被篡改的同时检查过期时间,使得这个 JWT 不会永久有效。

但是还有一个问题就是,JWT 在过期时间到达之前,依旧是一直有效的,但这个问题就类似于:你的密码在修改之前是一直有效的。所以“只要拿到 JWT 就可以冒充用户做任何事情了”和“只要拿到用户的密码就可以冒充用户做任何事情了”是一样的……

所以在防止冒充这个部分,你需要其他的防护手段,比如 HTTPS 双向认证,双向加密之类的。

JWT 相比密码,区别在于,JWT 是临时生成的,在有效期内总是有效,超过有效期需要重新生成;而密码是用户设置的,在用户主动修改之前总是有效的,有效期由其他策略控制,但通常都很长,用户修改密码后旧密码立即失效。

所以,如果使用 JWT 做 session 保持,那么在用户修改密码之后,JWT 不会过期,所有持有 JWT 的人依旧可以继续访问。因为 JWT 本身做不到主动失效,相当于 JWT 是用户的一个不受用户控制的“密码”。

如果你的系统支持 JWT 续期,那么一旦 JWT 泄漏,用户将无法找回账号,因为第三方可以拿着截获的 JWT 进行无限续期࿰

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值