阿里一面:小伙子,简述Springboot单点登录的实现?

什么是单点登录

只需要登录一次就可以访问所有的子系统。


基于Session实现单点的登录

  • Session的特性:
    1. 储存JSESSIONID在客户端
    2. 相同的域能够读取到数据
    3. 服务端保持Session会话
  • 理论基础
    通过子系统使用相同的域来实现:
    • A、B、C三个系统
    • A的域名为 a.bb.com
    • B的域名为 b.bb.com
    • C的域名为 c.bb.com
    • 那么将Cookie的域设置为 bb.com 。在访问A、B、C任何一个系统的时候都会带Cookie过去
  • 具体实现
    • 由于时间原因而且这种按照理论基础来实现没有太大的障碍。提一点在登录的时候最好加上?form=xxxx 进行登录成功后的跳转。

基于jwt实现单点登录

  • 什么是jwt:json 格式的数据,组成的web端,使用的令牌。
    1. jwt由三段 json格式 数据组成:header、payload、singnature
      • header:标头,该 json字段 包含{typ:“JWT”,alg:“HS256”}。定义令牌类型和加密算法
      • payload:负载,该 json字段 包含自定义到客户端的数据。
      • singnature:签名,用于防止令牌被篡改。不是json字段。是标头和负载各自的base64编码后加上服务器端才知道的盐值,经过标头定义的加密算法加密出来的值构成
    2. 如何拼接
      • Base64(标头).Base64(负载).签名
  • jwt如何实现登录验证
    1. 用户登录成功后,根据上面的三段拼接出jwt,返回给客户端存储。
    2. 用户访问需要授权的资源时,需要带上jwt。服务器进行下面的验证
      • 通过 . 分割客户端传的jwt

      • Base64解码(第一部分),获取标头部分。拿到加密算法

      • 将第一部分+第二部分+服务器生成jwt时使用的盐值,根据上面获取到的加密算法得出singnature部分。和分割的第三部分对比。判断jwt是否有效

      • 若有效,且使用了jwt框架或自己在负载加上了过期时间,则判断jwt是否过期

      • 若没过期,就可以Bas

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值