多种单点登录的方法和之间的比较

        有个项目可能要用到单点登录,以前也搭过cas的单点登录,公司用的是redis检查sessionId的方式单点登录。因为以前的cas比较久远,忘记了很多,所有有了疑惑,redis的单点登录和cas的单点登录有什么区别,为什么redis的那么简单,还没替换掉cas的呢。这里做一个简单的比较,方便以后的理解。

      首先,简单说下redis实现单点登录的方式,其实用redis甚至直接用数据库都可以完成这项任务,只是如果登录比对数据放在数据库中,也就意味着拦截器中的逻辑,每次比对都要从数据库里读取用户信息,这加大了服务器和数据库的性能开销。如果求简单,而且交互很少的情况下,也可以把sessionID放在数据库中。

    Redis或数据库模式下的单点登录:

      其实不管是redis中,还是数据库中,都只是一个存放 sessionID的工具罢了,具体的做法是

      1.A用户登录的时候,登录成功,在redis或者数据库中保存用户信息(账户名等),和sessionID(该值是每个浏览器第一次访问都会生成的一个唯一值,可以确认登录身份)。

      2.A用户继续使用或者使用同一浏览器登录其他子功能点时。可以在拦截器中检查,用户名和sessionID与前台传过来的sessionID是否一致,如果一致,继续访问。这一步也可以做到如果sessionID一样的话,可以免登陆直接进入其他子功能页,这也是单点登录的功能之一。

      3.B用户使用A用户的账号登录,登录成功,则更新sessionID。

      4.这时,A 继续访问的请求到达拦截器,拦截器比对sessionID,发现sessionID对不上,则跳转到登录页面。此时,A被B挤掉了,这就是redis 或者数据库模式下,简单的单点登录的逻辑。

      CAS下完成单点登录:

        cas其实就是引入了一个服务端和客户端的概念,有一个全局的服务端,每个客户端成功登陆之后,都需要在服务端注册。此时会有一个在服务端唯一的token。这样,在每一个客户端登录时,因为都需要在同一个服务端进行验证,所以,服务端会对配置好的客户端进行验证,这样就能确认身份了。当单点登录时,因为有一个明确的服务端的概念,可以在通过在客户端的配置,达成很多范围更大的单点登录功能。比方说,可以设置多浏览器下的单点登录。

区别:

           按我总结来说,其实第一种就像是一个门和一个锁的概念, 每次不同使用者的相同账号的登陆,都是一个换锁换钥匙的过程。先进去的人出来想再进去,发现门锁和钥匙对不上,就被赶走了。

            cas更像是一种管理员模式,也就是,找一个公证人,他负责保管锁,给你一把钥匙。只要是钥匙对了,一切都OK

            所以,在多浏览器下,或者大型分布式下,模块很多的情况下,cas更适合,因为如果换了浏览器,或者浏览器一关,再重新一开,或者多台服务器的redis和数据库不是同一个,第一种逻辑就行不通了,因为sessionID变了或者保存的地方不一致。

            如果说,简单的分布式项目,redis的单点登录也完全够了。

 

     

PS:

以下是另一位博主的理解,有些我没说清楚的地方也可以参考下:

http://375287760.iteye.com/blog/2400976

cas(单点登录)
现象:多个系统只需登录一次,无需重复登录
原理:授权服务器,被授权客户端
1、授权服务器(一个)保存了全局的一份session,客户端(多个)各自保存自己的session
2、客户端登录时判断自己的session是否已登录,若未登录,则(告诉浏览器)重定向到授权服务器(参数带上自己的地址,用于回调)
3、授权服务器判断全局的session是否已登录,若未登录则定向到登录页面,提示用户登录,登录成功后,授权服务器重定向到客户端(参数带上ticket【一个凭证号】)
4、客户端收到ticket后,请求服务器获取用户信息
5、服务器同意客户端授权后,服务端保存用户信息至全局session,客户端将用户保存至本地session
oauth2(登录授权)
现象:第三方系统访问主系统资源,用户无需将在主系统的账号告知第三方,只需通过主系统的授权,第三方就可使用主系统的资源(如:APP1需使用微信支付,微信支付会提示用户是否授权,用户授权后,APP1就可使用微信支付功能了)
原理:主系统,授权系统(给主系统授权用的,也可以跟主系统是同一个系统),第三方系统
1、第三方系统需要使用主系统的资源,第三方重定向到授权系统
2、根据不同的授权方式,授权系统提示用户授权
3、用户授权后,授权系统返回一个授权凭证(accessToken)给第三方系统【accessToken是有有效期的】
4、第三方使用accessToken访问主系统资源【accessToken失效后,第三方需重新请求授权系统,以获取新的accessToken】
单一登录
现象:同一系统,同一用户在同一时间内只能有一个会话(即一个用户只有一个在使用的浏览器)
原理:
1、把登录成功的用户放入session和缓存,缓存中格式:key:userID,value:sessionId
2、用户访问资源时,用拦截器(或过滤器)拦截用户请求,先判断用户是否已登录(根据session判断),若用户未登录,则定向到登录页面提示用户登录
3、若用户session已登录,根据用户userID取出缓存数据,判断当前浏览器的sessionId与缓存的是否一致,若一致,则继续访问
4、若sessionId不一致,则将当期的session数据清空,用户登出,提示用户被踢出

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值