jwt 的 token 被获取怎么办

发布于 2021-04-29 16:49:49

jwt 签发后,每次请求会续期,如果 token 被抓包后,别人得到后,有没有好的方案解决身份窃取问题?

查看更多

关注者
0
被浏览
1.3k
4 个回答
wei745359223
wei745359223 2021-04-29
这家伙很懒,什么也没写!

签发 token 的时候加入一些验证信息,比如 IP
如果当前 request IP 和签发时候的 IP 不一致就加 blacklist 里

heyjei
heyjei 2021-04-29
这家伙很懒,什么也没写!

现在都是 HTTPS,为什么会被抓包呢?所以不存在这个问题

你要说是在用户设备上抓包,那么他都拿到了用户的物理机器,这个应该不在防范的考虑范围之内吧。就跟你拿到服务器的实体,可以不输密码重启进入安全模式一样

whileFalse
whileFalse 2021-04-29
这家伙很懒,什么也没写!

“每次请求会续期” 这就是问题所在。

JWT 和 Session 的本质区别是什么?是 JWT 设计目的是“不需要中央服务器即可验证有效性”;签发在中央服务器,验证在业务服务器,不需要和签发服务器交互。由于其本质是离线验证,因此无法吊销。有那些个闲人搞出来 JWT 吊销机制完全破坏了这个设计目的,纯属闲的,直接用 Session 不好么。

那么如果不用那些个闲的卵疼的吊销机制,JWT 就只能使用“拒绝续期”机制。把 JWT 有效期设置得短一点,然后要求客户端频繁去「中央服务器」续期。当身份窃取时就拒绝续期。

而 LZ 是“每次请求会续期”,这说明什么?说明业务服务器能续期啊!这种行为完全破坏了续期机制的意义,还不如设置一个一百年的有效期,省得麻烦。

dcoder
dcoder 2021-04-29
这家伙很懒,什么也没写!

JWT 的能力是很有限的, 参考这个帖子里的讨论

https://stackoverflow.com/questions/21978658/invalidating-json-web-tokens

Truly stateless JWT authentication cannot be achieved for a typical, real world web app because stateless JWT does not have a way to provide immediate and secure support for the following important use cases:
User's account is deleted/blocked/suspended.
User's password is changed.
User's roles or permissions are changed.
User is logged out by admin.
Any other application critical data in the JWT token is changed by the site admin.
You cannot wait for token expiration in these cases. The token invalidation must occur immediately. Also, you cannot trust the client not to keep and use a copy of the old token, whether with malicious intent or not.

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览