jWT
2021-07-23 21:48:24 21 举报
AI智能生成
jwt认证流程
作者其他创作
大纲/内容
实现方案
1. 不依赖redis,纯用jwt设计
核心思路
1. 用户登录时进行认证
使用UsernamePasswordAuthenticationFilter即可
也可以使用邮箱登录
2. 认证通过生成jwtToken,放入header中
使用AuthenticationSuccessHandler
代码实现
3. 客户端访问接口携带jwtToken
放入header中
4. 服务端验证jwt合法性
使用filter,成功后放入SecurityContext
代码实现
存在的问题
1. 没法自动续期
2. 注销登录后以前的token还能用
3. 权限变更后需要重新登录
2. 结合redis实现
核心思路
1. 用户登录认证
2. 认证成功,根据用户信息生成token,同时,username 作为redis key
并且设置过期时间。将token返给客户端(该token不设置过期时间)
并且设置过期时间。将token返给客户端(该token不设置过期时间)
3. 客户端携带token访问服务器
4. 服务器解析token,获取用户名,然后去redis中查询,如果没有,认证失败,有则成功
注销登录
1. 根据用户名,删除redis中的key
2. 用户再次携带该token访问时,就会找不到key认证失败
权限更新
1. 权限更新时,根据用户名找到redis中存的用户信息
2. 从数据库查询最新的权限,替换该用户信息
token刷新
1. 客户端访问时,查询剩余过期时间
2. 若小于某个值,更新redis过期时间
存在的问题
1. 本质上变成了基于redis认证,jwt貌似没啥用了,就是生成了一个token
2. 违背了jwt的初衷,就是无状态,使用redis变成了有状态,和传统的session一样了
核心观念,由客户端去维护登录状态,服务端不做保留
存在的问题
1. 续签问题
2. 注销问题
3. 密码权限重置
0 条评论
下一页