修改密码或者通过忘记密码重置密码之后,jwt 的失效问题

2019-08-19 17:51:39 +08:00
 kayseen
如题:

目前使用的 token 是 redis 中存 uuid 作为 key,然后返回前端这个 uuid;

那么问题来了:
1.如果用户登录之后修改密码,因为用户已经登录,所以我可以获取他的 token 再删除他的 token,没问题
2.如果用户通过忘记密码来重置密码,那么我给他重新返回 uuid 作为 token,只要之前的 token 没到期,那么仍然有效


如果使用 jwt,那么使用如下:
在 payload 中加入`user_id`然后返回给前端,后端不作保存,只做校验解密

一样的问题:
1.用户再怎么修改密码,`user_id`又不会改变,只要 jwt 不过期,用户再怎么修改密码,之前签发的 jwt 仍然可以校验出来`user_id`

这种问题应该怎么解决呢?

2504 次点击
所在节点    Python
5 条回复
kayseen
2019-08-19 18:00:04 +08:00
现在有一个思路是这样
```python
1. 在 jwt 的 payload 中添加`user_id`和一个`唯一编码`,同时在 redis 中保存这个编码,如果修改密码,则改变 jwt 里面的编码和 redis 中的编码

可是如果这样,jwt 就已经是有状态的了吧?
```
chickenJuicer
2019-08-19 18:02:54 +08:00
密码加盐,改密码换盐, 如果盐不对但是 uid 是对的, 那么刷新 jwt
throns
2019-08-19 18:04:45 +08:00
w516322644
2019-08-19 18:07:04 +08:00
一般修改完密码,都退出当前用户重新登录,jwt 这种退出后原来的就进入黑名单,就不能再用这个 token 访问了。
sytnishizuiai
2020-06-24 14:46:38 +08:00
我碰到了和你类似的问题,用户密码被盗后,找回密码,但是盗号人还是可以用之前签发的 token 使用。
我的 token 签发后不存,所有用户会出现多个 token 都有可能,但我过期超级短,所以也不在意。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593257

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX