技术栈:Spring全家桶 + 鉴权框架shiro + Redis + Mysql8
问题场景:
用户的token互串了。具体描述为:A用户在小程序上登录,发现用户信息并不是自己的,而是B用户的,然后A用户再次请求登录接口之后,得到新token,然后才是自己的信息。出现token互串的现象。而且这种在清除用户缓存之后(没有删除用户数据,也没有清除token),触发概率极大,几乎可以说是百分百触发了。
目前怀疑推测:
1、首先怀疑Redis缓存中出现token重复了,但这个目前暂时被排除了,因为token是uuid的长度为20位的随机字符串,我们的用户规模就100w不到一点,token session产生数量也就150w左右。
还远远没有达到uuid重复的概率。
2、另外怀疑同一Redis存储的token被不同用户使用,但这个在我们的测试环境模拟之后,暂时也被排除了
3、我们的shiro框架中,没有启用accessToken和refeshToken,问一下这个是不是可以起到防止用户token互串的问题。
提问:
有没有老哥遇到过token互串的问题,有遇到过的或者已经解决的,都可以在帖子下面说说,集思广益,最近几天被这个问题困扰,很愁。项目运行4年了,用户量也上来了,但最近出现这个问题,用户反馈的数量也越来越大,有点难受,和无头苍蝇一样。
从生成 token 的逻辑入手,保存 token 之前,判断 token 是否存在且已被其他用户使用,如果是就重新生成一个 token 进行重试