美文网首页
登录流程文档梳理

登录流程文档梳理

作者: 一只浩子 | 来源:发表于2023-08-18 12:59 被阅读0次

前段时间对系统密码安全性进行了改造,同时对登录流程中的细节进行文档梳理。比如,token生成,token校验、续期,以及全局用户信息存储方式,登出和修改密码,密码重置需要做哪些逻辑处理。

一、登录流程图
1.登录-流程图.jpg
二、JWT 实现登录认证 + Token 自动续期
  1. 创建token
    1.1 创建jwtHeader;
    1.2 创建jwtPayload,jwtPayload存放userId, uuid, clientType;
    1.3 提前生成秘钥对(RSA),生成签名;

  2. 创建UserTokenEntity(userId,uuid,clientType, createTime)

  3. 缓存UserTokenEntity
    3.1 字段
    userId:用户id;
    expireTime = 24小时,过期时间;
    clientType = APP/WEB,表示是web端还是app端;
    uuid:表示唯一性;
    3.2 实现组合唯一
    redisKey = userId + clientType + uuid
    例如:张三的账号可以多个终端登录,userId + clientType + uuid实现组合唯一,作为当前客户端登录的唯一性key,同时如果需要查询这个账号有几个终端登录,可以用userId查询。

  4. token校验、续期
    拦截器中主要做两件事,一是对token进行校验,二是判断token是否需要进行续期(最小续期时间:minTime = 1小时)
    4.1 解析token,验证签名,验签是否通过;
    4.2 redis获取UserTokenEntity,如果UserTokenEntity == null,token过期,需要重新登录;
    4.3 如果UserTokenEntity != null,验证是否需要续期:
    token已使用时间:usedTime = now - createTime,now是当前时间,createTime是创建UserTokenEntity的时间;
    最大可使用时间:canUseTime = expireTime - minTime = 23;
    usedTime如果小于canUseTime,说明不需要续期;
    usedTime如果大于canUseTime,则说明需要续期,UserTokenEntity中createTime更新为当前时间,UserTokenEntity中createTime更新为当前时间,UserTokenEntity中createTime更新为当前时间,重要的说三遍,重新缓存UserTokenEntity。

三、其它重要关联点
  1. 缓存全局的用户信息,GlobalUserInfoEntity
    UserService提供统一方法,参数userId,查询用户全部信息,包括用户、部门、角色、菜单等信息,方法上提供缓存,24小时;

  2. 登录
    先移除缓存用户信息,再查询并更新用户缓存信息;

  3. 退出登录
    删除该用户缓存UserTokenEntity deleteRedisKey = userId + clientType + uuid

  4. 修改密码
    删除该用户所有客户端缓存UserTokenEntity, 让所有token都失效,deleteRedisKey = userId

  5. 重置密码
    删除该用户所有客户端缓存UserTokenEntity, 让所有token都失效,deleteRedisKey = userId

相关文章

网友评论

      本文标题:登录流程文档梳理

      本文链接:https://www.haomeiwen.com/subject/fsphmdtx.html