单点登录

一、SSO,单点登录(single sign on),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录和单点注销。

 

二、单点登录需求:多套系统能够识别同一用户身份,并实时同步用户信息以使各个系统进行相应的权限控制。一般单点登录实现一个系统登录,其他系统即可登录;一个系统注销,其他系统也会注销;一个系统登录信息过期,其他系统的登录信息也会过期。

 

三、实际应用中,单点登录的最佳环境是

       用户在多套系统只有一个用户名和密码,即多套系统共享这一套用户名和密码,以及各应用系统采用的技术架构相同,域名后缀相同。

       单点登录的最坏的环境是

       用户在多套系统有各自的用户名和密码,每个系统都各自存储了各自的用户信息,且每套系统采用的技术架构不同,域名后缀也不同。

 

四、SSO的两种架构与三种实现技术

      从应用架构层面,SSO主要可以分为集中验证模式和多点验证模式。

      集中验证模式:当应用系统需要登录时,统一交由验证服务器完成功能登录动作,应用系统不提供登录接入(登录界面)。

      相对于多点验证模式来说,集中验证模式的适用范围更广,而且在SSO服务器中使用的是统一的用户名密码,用户无需关注登录的是哪套系统的账号,所以用户体验更加优秀。由于所有的登录都放在了统一的服务器,所以当集中验证服务器宕机时,

所有系统无法正常登录,或丢失SSO的功能,建议以独立服务器作为集中验证服务器,并需要保证登录服务器的稳定性。

      多点验证模式:应用系统供各自的登录界面,登录了一套系统后,另外其他系统无需再次登录即可通过身份验证。

      在多点验证模式的模式下,所有的登录操作都在应用系统完成,任何一套系统宕机不会对其它系统产生影响,也不会影响正常运行系统间的SSO。但若各套系统的账号不一样的时候,若要用户区分每套系统的用户密码,必定会降低用户的体验,

为了解决该问题,多点登录模式最好有统一的用户密码验证的服务(如LDAP身份验证)。另外,多点登录模式相对集中验证模式来说会存在更多的技术限制。

 

      从SSO技术实现的角度,SSO的实现通常有一下三种技术实现途径:代理登录(agent)、令牌环(token),身份票据(ticket)。

      代理登录(agent):代理登录的原理就是在IE端通过表单提交的方式模拟应用系统的登录操作,实现SSO。

      代理登录的优点就是无需对原有系统做任何改造,适用于无法改造的旧系统;

      其缺点很明显:

    1、稳定性差,一旦登录期间某台服务器无法响应,则该服务器无法单点登录。

    2、安全性差,用户名密码通过明文传输。

    3、由于登录期间需要监控各个系统的响应,所以不建议大量使用,否则会影响登录的性能。

    4、由于IE的安全限制,代理登录必须在同域的情况下运行。

      令牌环(token:通过Cookie共享令牌环的方式传递当前用户信息,实现SSO。

      令牌环的方式最大好处在于无需统一的验证服务器,是“多点验证模式”的主力实现技术,各个服务器都通过统一的密钥对令牌进行加密解密,所以该方式具有安全性高、稳定性好、性能消耗低等优点;其缺点就是必须保证各台应用服务器同域

      身份票据(ticket:与令牌环不一样,身份票据是通过URL的方式传递,通过“两次握手”的方式,实现SSO。(如开源的CAS就是这种原理)

      身份票据的方式,是适用范围最广的一种SSO实现方式,可以解决跨域等问题,安全性高、稳定性好;其缺点就是必须增加一台验证服务器,保证在高压下验证服务器的稳定运行,性能方面由于每次登录都需要访问验证服务器,所以比令牌环的方式略差一点。

    

      三种技术实现途径的比较

     

比较项

代理登录

令牌环

身份票据

需求实现程度

无法实现同时切换用户与会话同时过期

全部

全部

对原系统改造

小量改造

小量改造

安全性

稳定性

偏低

性能开销

登录瞬间压力大一点

非常小

较小

适用范围

同域,对用户密码不一致的系统,需在登录服务器的用户凭证库保存用户密码映射

同域,对不同登录名需增加对用户凭证库的访问

所有可改造的系统,对不同登录名需在登录服务器的用户凭证库保存用户映射

独立验证服务器

需要

不需要

需要

登录模式支持

集中验证模式

集中验证模式/多点验证模式

集中验证模式

    本人小白,在对接过程中遇到单点登录问题,查找网上资料记录一下。

    token实现思路:

    1、用户登录校验,校验成功后就返回Token给客户端。

    2、客户端收到数据后保存在客户端。

    3、客户端每次访问API是携带Token到服务器端。

    4、服务器端采用filter过滤器校验,校验成功则返回请求数据,校验失败则返回错误码

    ticket实现思路:

    1、访问服务:sso客户端发送请求访问应用程序提供的服务资源。

    2、定向认证:sso客户端会重定向用户请求到sso服务器。

    3、用户认证:进行用户身份认证。

    4、发放票据:sso服务器会产生一个随机的ServiceTicket。

    5、验证票据:sso服务器验证票据ServiceTicket的合法性,验证通过后,允许客户端访问服务。

    6、传输用户信息:sso服务器验证票据通过后,传输用户认证结果信息给客户端。

    详细CAS实现单点登陆原理请参考 http://blog.csdn.net/javaloveiphone/article/details/52439613,我觉得讲的很详细。

   

 

posted @ 2017-11-30 00:40  乌鸦也能展翅高飞  阅读(1173)  评论(0编辑  收藏  举报