单点登录原理
一、什么是单点登录
单点登录英文全称Single Sign On,简称SSO。指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。
二、为什么需要单点登录
在一些子系统用户信息重叠的项目中,可以通过SSO实现统一的登录管理、认证授权。最经典的例子就是淘宝和天猫,如果你登录了淘宝,那么当你访问天猫的时候就会自动登录,因为这两个系统的账户是统一管理认证的。
那么就有一个问题:为什么无法用传统的单系统登录,一定要用单点登录?
cookie的跨域问题
最大的原因就是传统的单系统登录是使用Cookie来保持登录状态的,那么在这种多系统的登陆中,域名往往是不同的,而Cookie是无法跨域的。
也就是说我们需要其他的方案来代替Cookie去解决这种一次登录的问题。其实SSO就可以理解成为一个中转站,我们把Cookie统一存储到SSO中,访问的时候带上访问的路径以及其他参数,这样就可以登录后将你返回到你访问过来的页面,并且在SSO中留下Cookie。因为Cookie是前后端共享的,所以随后在其他的系统想要登录的时候只需要向SSO发送请求查看这个Cookie是否过期就可以保证多个系统中角色的登录状态。
三、Cookie+Token的单点登录原理
假设我们现在有A、B、C、D四个系统,以及SSO系统。ABCD四个系统均被SSO信任,且用户依托于SSO。
当我们在系统A中做请求操作的时候,会先检查登录状态,如果没有代表登录的Token,就向SSO页面发起loginCheck,检查SSO页面中是否有对应的Cookie,如果没有我们会被重定向到SSO页面中去(携带系统A的地址,以及其他参数),进行注册/登录。登录成功后,SSO页面会在当前页面中保留标识用户在对应系统登录成功的Cookie并且根据请求过来的参数,将我们重新重定向到系统A中,并告知我们已经登陆了(以Token的形式)。
随后当我们在这台机器上再次访问其他的BCD任意一个系统时,都会向SSO系统发起一次loginCheck。这时SSO系统中已经有了Cookie了,那么就会跳过登录直接给对应的系统颁发Token,表示用户在该系统中登录了。
这样就可以实现单一系统登录后,其他互相信任的系统均可以免去登录步骤直接登录