V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kayseen
V2EX  ›  Python

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

  •  
  •   kayseen · 2019-08-19 17:51:39 +08:00 · 2644 次点击
    这是一个创建于 1925 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题:
    
    目前使用的 token 是 redis 中存 uuid 作为 key,然后返回前端这个 uuid;
    
    那么问题来了:
    1.如果用户登录之后修改密码,因为用户已经登录,所以我可以获取他的 token 再删除他的 token,没问题
    2.如果用户通过忘记密码来重置密码,那么我给他重新返回 uuid 作为 token,只要之前的 token 没到期,那么仍然有效
    
    
    如果使用 jwt,那么使用如下:
    在 payload 中加入`user_id`然后返回给前端,后端不作保存,只做校验解密
    
    一样的问题:
    1.用户再怎么修改密码,`user_id`又不会改变,只要 jwt 不过期,用户再怎么修改密码,之前签发的 jwt 仍然可以校验出来`user_id`
    
    

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

    5 条回复    2020-06-24 14:46:38 +08:00
    kayseen
        1
    kayseen  
    OP
       2019-08-19 18:00:04 +08:00
    现在有一个思路是这样
    ```python
    1. 在 jwt 的 payload 中添加`user_id`和一个`唯一编码`,同时在 redis 中保存这个编码,如果修改密码,则改变 jwt 里面的编码和 redis 中的编码

    可是如果这样,jwt 就已经是有状态的了吧?
    ```
    chickenJuicer
        2
    chickenJuicer  
       2019-08-19 18:02:54 +08:00
    密码加盐,改密码换盐, 如果盐不对但是 uid 是对的, 那么刷新 jwt
    throns
        3
    throns  
       2019-08-19 18:04:45 +08:00 via Android
    w516322644
        4
    w516322644  
       2019-08-19 18:07:04 +08:00
    一般修改完密码,都退出当前用户重新登录,jwt 这种退出后原来的就进入黑名单,就不能再用这个 token 访问了。
    sytnishizuiai
        5
    sytnishizuiai  
       2020-06-24 14:46:38 +08:00
    我碰到了和你类似的问题,用户密码被盗后,找回密码,但是盗号人还是可以用之前签发的 token 使用。
    我的 token 签发后不存,所有用户会出现多个 token 都有可能,但我过期超级短,所以也不在意。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:25 · PVG 05:25 · LAX 13:25 · JFK 16:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.