• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

单点登录企业级这块怎么实现的

武飞扬头像
刘架构
帮助1

学新通

前段时间, 公司组织内部分享 ,有同事讲了关于单点登录的相关知识,散会后,去他部门找他讨论了一下相关知识点,关于单点登录 ,所以做个总结

学新通

单体系统的session共享
● 登录:将用户信息保存在Session对象中
○ 如果在Session对象中能查到,说明已经登录
○ 如果在Session对象中查不到,说明没登录(或者已经退出了登录)
● 注销(退出登录):从Session中删除用户的信息

后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。

学新通

多系统即可能有多个Tomcat,而Session是依赖当前系统的Tomcat,所以系统A的Session和系统B的Session是不共享的。
解决系统之间Session不共享问题有一下几种方案:
● Tomcat集群Session全局复制(集群内每个tomcat的session完全同步)

session 广播机制实现

在用户登录了一个模块后,这个模块的服务器会将用户的登录信息保存在本机的session中,然后通过session的广播机制,将这台服务器session中的内容复制到其他模块所在服务器的session中,这样其他的模块也就得到了用户的登录信息,用户在访问其他模块时就不需要重复登录了。

但这种模式会多次复制session中的内容,造成用户数据的冗余存储,因此并不推荐使用这种方式实现单点登录。

● 把Session数据放在Redis中(使用Redis模拟Session)自己实现

用户在项目的任意一个模块登录后,该模块会将用户的登录信息放到 redis 和 cookie 中。

① 系统会先将用户的登录信息存入 redis中,其在 redis 的 key 值是生成的唯一值 (可以包含 IP、用户 id、UUID等值),value 值存放用户的登录信息。

② 然后系统会将这名用户在 redis 中的 key 值存入该用户的 cookie 中,用户每次访问任意模块时都会带着这个 cookie。

③ 用户在访问其他模块发送请求时,都会带着客户端的 cookie 进行请求,而客户端的 cookie 已经存入了该用户在 redis 中的 key 值,这样其他模块在处理用户的请求时,可以先获取用户 cookie中的 key 值,然后拿着这个 key 值到 redis 中进行查询,如果在 redis 中能查询到该用户相应的登录信息,就说明该用户已登录,就不需要用户进行重复登录了。

  • 使用token实现

学新通

客户端发送请求到网关进行验证,网关会转到auth认证授权中心,认证中心会完成用户信息的认证,完成认证会会基于UUID生成一个token,然后与用户信息绑定在一起存储到数据库.后续用户在访问资源时,基于token从数据库查询用户状态,这种方式因为要基于数据库存储和查询用户状态,所以性能表现一般.(一般可用于中小型企业,查询量较少的时候)

token 是按照一定规则生成的字符串,字符串中可以包含用户信息。开发人员可以自行定制这个生成规则,也可以使用提供好的生成规则(如使用 JWT 自动生成包含用户信息的字符串)。

① 用户在项目的某个模块进行登录后,系统会按照一定的规则生成字符串,把用户登录之后的信息包含到这个生成的字符串中,然后系统可以将这个字符串返回,主要有两种返回方式:

(1)可以把字符串通过 cookie 返回

(2)可以把字符串通过地址栏返回

② 这样用户在访问其他的模块时,每次访问的地址栏都会带着生成的字符串(或者 cookie 中带着生成的字符串),被访问模块就可以获取地址栏中的生成字符串(或者获取 cookie 中的生成字符串),然后根据字符串获取用户信息,如果可以获取到用户的登录信息,说明该用户已登录,用户就不需要重复登录了。

学新通

  • CAS 单点登录
    学新通
    ● SSO 单点登录访问流程主要有以下步骤:
    a. 访问服务:SSO 客户端发送请求访问应用系统提供的服务资源。
    b. 定向认证:SSO 客户端会重定向用户请求到 SSO 服务器。
    c. 用户认证:用户身份认证。
    d. 发放票据:SSO 服务器会产生一个随机的 Service Ticket。
    e. 验证票据:SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问
    服务。
    f. 传输用户信息:SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

  • 参考资料:

  • https://blog.csdn.net/weixin_60589893/article/details/121491044

  • https://jwt.io/

  •  

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgheaek
系列文章
更多 icon
同类精品
更多 icon
继续加载