单点登录

Posted EffectiveCoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单点登录相关的知识,希望对你有一定的参考价值。


        先说概念,所谓单点登录,是指:

        一个庞大的系统由多个子系统组成,我们登录其中一个系统后相当于登录整个系统。即单点登录则全局生效,无需多个子系统重复登录n次。

    

        既然有单点登录,也就对应着单点注销。

        所谓单点 指的是对于系统来说,系统的一部分(某个点),而不是你 手机登录QQ、电脑登录QQ这种登录地点或者方式。


        说完概念,再说原理&实现,先来看看多点登录的方式。


然后是单点登录

单点登录


        注销过程跟这个类似,用户体验感相当差,而且登录信息及相关数据冗余。算是一个设计上的不足,所以说我们需要单独的创建一个单点登录认证中心,负责整个系统的登录还有用户权限的认证,当需要访问受限资源,或者用户登录的信息时。系统检查用户是否登录,若无登录,反馈给用户登录界面。登录操作完成后通过一些权限的检查,决定是否给予用户对应的受限资源。这里面还会有一些关于子系统跟SSO交互的过程,及一些相关会话维系的过程,这些在后面说。先感受交互方式、体验感。

        这么画是为了看起来比较直观,下面放个UML,仅仅文字叙述注册流程太过无力,用流程图说明比较直观、清晰吧。


多点登录方式流程图:

单点登录


单点登录方式流程图

单点登录


        因为篇幅有限,单点注销流程就不给出了,大家可以试着画一画,思考一下。

        有了UML 流程图,我相信大家对什么是单点登录又该有个比较清晰的认识了。但是其中还是有几个需要注意的问题。


        在单点登录的系统中存在这么几种类型的会话类型。

        1> SSO中的全局会话

        2> 子系统中的局部会话


        首先是全局会话,每个用户在SSO认证中心中维持一个会话,这个会话中具有用户登录后所产生的令牌、用户的一些信息、用户在访问系统的信息、关于会话的一些信息。生命周期在会话中是最长的,当无子系统注册信息时,超过一部分时间自动过期。

        然后是局部会话,用户获取令牌后,然后校验令牌的有效性,此时全局会话已经创建(但是信息并不完整),然后注册相应系统的信息,当SSO验证生效时得到反馈,创建用户在子系统中的局部会话(令牌、用户简单信息、操作信息、会话信息)

        当局部会话长时间不进行操作即将过期时,会在全局会话中检查用户是否在其他系统操作,若在操作,可以认为用户有再次使用本次系统的可能,故继续维持该系统内部的局部会话(目的是保护用户的一些操作信息、简单信息,不用再次验证用户是否登录,提升响应时间)。若无操作,本次会话过期,并且注销在全局会话中的子系统注册信息。

        为保证一些数据的一致性,当全局会话发生变化时,所有局部会话应该是知晓的。

        并且在局部会话中维持的应该是用户在此系统中的一些状态和操作信息,在全局会话中应该维持的是用户的登录及自身状态信息。

        单点登录的原理大概就是这样,其实做好一个优秀的SSO不是那么简单,有些情况想象不到,需要经验及一定的问题规模才行。需要大家一块儿交流完善。

        如果文中存在错误及不足,恳请指正。


注:

        开始的示意图用keyNote画的;

        UML图使用processon制作;

        这次特地排版了

        欢迎关注,欢迎转载~



再注^_^:

        之前学的不深入也不多导致沉淀的不行,所以输出不太够,以致断更,大家见谅。近期会有一大波更新来补上的~

        保持节奏,保持节奏,不能再随缘更新了[捂脸]


预告一下:下一篇,JVM相关。

以上是关于单点登录的主要内容,如果未能解决你的问题,请参考以下文章

什么是单点登录?单点登录有什么优势?

CAS搭建单点登录Web端

单点登录 SSO

话说单点登录

php 怎么实现单点登录?

Web系统之常用单点登录协议