两种单点登录:1.同顶级域名下的单点登录 2.不同域名的单点登录。
1、同顶级域名
假设一共有三个服务器,一个sso专门用于单点登录,其他A,B两台服务器真正处理业务,他们三个有同一个顶级域名:top.com,各自分别域名为sso.top.com, a.top.com,b.top.com
首先,登录有两个要点是JsessionId和服务器的session,在登陆sso.top.com时,a、b服务器是无法获取到请求,也就无法生成session的,那现在只要把客户端和单点服务器建立的jsessionid在访问A,B服务器时候带上,同时让A、B服务器有对应的session,便可以实现登录。
解决:
(1)请求时候如何带上jsessionId:
他们共享了同一个顶级域名,这是便可以利用这点,在sso登陆后,将cookie(jsessionID)的域设置为顶级域 top.com,这样,其他的子服务器便也可以拿到此客户端的Cookie了。
(2)A、B服务器如何生成对应的session:
原本由于他们各自有各自的session,导致无法互通登陆状态,这是便可以使用共享session的办法来解决。比如使用spring session来进行实现。
2、不同域
不同域名的情况,可以使用CAS单点登录:
- 假设有sso服务器,A, B 三台服务器,他们不同域。
- 用户访问业务系统A,业务系统A中没有用户的登陆状态,跳转到sso单点服务器进行登录。
- sso服务器上通过用户名+密码登陆后,sso保存session状态,并生成ServiceTiket(ST) ,用户端浏览器生成cookie
- sso将ST返回给A服务器,A服务器拿到后再拿着ST返回sso进行验证,验证通过则登录A成功,A服务器生成用户的session,用户成功登录到A系统。
未完待续。。。。。。