概念
单点登录就是在一个多系统共存的环境下,用户在其中一个系统登录了,实现其他系统可以免登录,获得信任.
单点登录的实现
单系统登录
在聊多系统单点登录前,首先我们要明白单系统如何实现登录功能的。单系统登录主要是使用session存储用户信息,然后将session_id存放在cookiet中,每次发起请求时,http协议会携带cookie,服务器可以通过cookie获取seesion_id,从而获取到用户信息。实现登录。
多系统实现单点登录需要解决的问题
- session共享问题。
由于session是不可以跨域访问的,那处理session跨域请求就是一个问题。
解决方案:
- 将session存在redis中。
- cookie跨域访问问题。
cookie不能跨域名访问,如在a.com的cookie,在b.com下是不能获取a.com的cookiet的。
- 多个相同一级域名共享cookie,设置cookie的domain即可
如a.study.cn的cookie的domain设置成".study.cn",则其二级域名都即可获取a.study.cn的cookie
- 将登录获取的凭证保存在sessionstroge
关于cas系统
CAS(Central Authentication Service)是建立一个作为多系统登录认证中心的系统,所有的系统的认证都会重定向到该系统进入处理认证。cas系统也是基于上面理念达到单点登录的目的的,这只是单点登录的一个经典案例。
cas系统的实现
例如存在系统A(a.com)和系统B(b.com)及cas系统(cas.com)
- 当用户进入a.com时,系统A检测到用户尚未登录,就会重定向去cas.com?server=a.com,cas系统发现用户未登录,就会引导到登录页,用户输入账号密码后,用户就会与cas系统建立全局会话,生成用户登录凭证token,并将token存在浏览器cookie中,然后携带token重定向返回a.com,此时用户获取token提交给A系统,A系统那token去cas验证,验证正确,即建立用户的局部会话,创建session。
- 当用户进入a.com后,直接进入b.com时,B系统检测到用户尚未登录,就会重定向去cas.com?server=b.com,此时cas系统已建立全局会话(因为重定向cas.com时,会携带上用户上次进入cas系统创建的cookie),则cas系统会携带上token重定向返回b.com,B系统将token发送给cas系统,验证正确,则用户与B系统建立局部会话