单点登入相关知识点

前端路径切换

  methods: {
    loadLoginInfo() {
      let loginInfoString = localStorage.getItem('loginInfo');
      if (!loginInfoString) {
        this.$router.push('/login');
        return;
      }
      this.loginInfo = JSON.parse(loginInfoString);
    }
  },

带有授权的登入系统

  1. 携带 jwt 访问应用服务1 
  2. 解析jwt 获取用户id等相关信息
  3. 携带用户id 访问 授权服务
  4. 授权服务 返回用户id对应的权限
  5. 应用服务1核对对应的权限 判断并返回资源

微服务的登入系统  主要加入了网关这项服务

  1. 携带jwt访问网关
  2. 网关解析jwt获得用户id相关信息
  3. 网关 携带用户id重定向到应用服务1(注:携带用户id可以通过请求头传递)
  4. ...........(注:和带有授权的登入系统步骤一致)

jwt的加密流程

  1. jwt有三部分组成(head payload sign)
  2. 加密公式:base64(head).base64(payload).base64(sha256(base64(head).base64(payload)+salt)

网关处理jwt的续期逻辑

网关可使用的redis内存储jwt为key对应的数据,(例如expire过期时间,userId用户id,username用户姓名)

网关以jwt为key获取redis数据

  • 获取成功
  1. 判断对应的过期时间是否少于两小时 少于则重设redis对应的过期时间
  • 获取失败
  1. 重定向到登入界面

多设备登入 状态顶替业务 

在jwt的生成时包含设备信息 (注:不同设备同一个用户登入会生成不同的jwt ,redis保存这些同一个用户不同设备的jwt的expire过期时间,同时保存当前用户登入的是哪个jwt 只有当前登入的jwt与客户端传递的相同并且未过期 才能继续向后传递)

redis结构

{jwt}:{expire}每条记录是一个设备的登入记录

{username}:{jwt}记录用户登入的是哪个jwt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值