牛骨文教育服务平台(让学习变的简单)
博文笔记

分布式系列 单点登录和session共享

创建时间:2017-06-26 投稿人: 浏览次数:225

          最近跟组织一起学习,本来说好的学习大数据,不知道怎么的,忽然一看材料,莫名转战到了分布式,搞起了高级架构的知识了。

    看了看故事的梗概,还不错,从基础的分布式调用和架构设计,再到事务一致性,HA,到web应用,数据库高可用和性能优化等一系列,也算是有一个很不错的体系,就计划坚持着学下去了。

    在学习分布式系列之前,曾经也花了一段时间了解过单点登录和Session共享的问题,只不过当时没有比较深入的学习和分析过,只是简单的看过一些shiro视频和博客,希望借着这次机会,从理论上和代码层面都有一个比较深刻的认识。

    好了,啰嗦的够多了,进入正题环节。

    

    单点登录解决的问题其实很简单,就是通过一个用户认证系统,打通所有关联子系统的认证,从而达到安全高效访问子系统的目的。而session共享是实现的单点登录的一种方式。

    一、真伪单点登录

    何为真单点,何为伪单点呢?其实理解起来也很简单。

    伪单点,举个例子,比如一般中小公司里的内部系统,这类系统一般只有一套用户认证和权限系统,各子系统之间也都是相互信任的,对用户的验证方式都是统一的,这类就是伪单点;

    像两个比较大型的系统之间的整合,比如A公司的a系统要整合到B公司的b系统中,两个系统之前肯定不是统一的验证方式,信任什么的更不用提了,这类单点就稍微复杂一些,也就是真单点。

    二、如何解决单点问题

    关于解决单点问题,其实有比较成熟的策略了,适合各种简单或复杂的业务场景。

    1、简单些的,比如,使用shiro进行会话管理;

    2、服务器间的session复制;

    3、shiro+cas实现;

    4、使用专业的SSO产品。

    一般来说,shiro方式实现就可以了,大型企业或需要实现真单点的,一般可能会使用到专业的SSO产品。

   三、实现原理

                    

   从上图可以看出,客户端在访问系统时:

   1、要先通过认证服务器,认证服务器在用户登陆后,会颁发一个ticket;

   2、客户端拿到ticket后,再去访问子系统;

   3、若子系统无法识别,或检测到非法,会再次转到认证服务器,让客户端再次登录。

   客户端get到ticket后,在到达每个子系统之前,都会被检测一下ticket,也就是检查用户的登录信息。

   

   今天先到这里,简单描述了基本的单点登录原理,下一篇会根据更详细的流程图分析一下代码实现。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。