单点登录(Single Sign On)是指一次登录即可访问相关的系统网站。而实现的技术方案有很多种,针对不同场景需求方案也不一样。
场景
1、只有一个域名
只有一个系统平台一个域名,如: example.com
登录流程:
- 登录生成Session,将SessionId设置到当前域名的cookie中
缺点:
- 只限于单个系统平台
2、二级域名相同
多个系统平台,但是二级域名相同,如: xxx.example.com
、 yyy.example.com
,二级域名都是 example.com
登录流程:
- 登录生成Session,将SessionId设置到二级域名的cookie中
- 同一个二级域名下的系统,只要登录一次其他系统即可免登
缺点:
- 如果公司的二级域名比较多,不同二级域之间无法免登
3、二级域名不同
多系统平台二级域名也不同,如: xxx.example.com
、 xxx.test.com
、 demo.com
,二级域名都不同,跨域无法读取cookie。实现方案有很多种,我们看下cas实现,这里就需要一个sso认证中心服务来实现单点登录。
登录流程:
xxx.example.com
未登录跳转到sso服务的统一登录页www.sso.com/login
,输入账号密码创建全局会话,设置tgc到cookie,并将生成tgt参数添加xxx.example.com
URL上跳回xxx.example.com
服务拿tgt参数去获取st,做这一步主要为了安全,然后用st去获取用户信息,st是一次性的,使用后失效,校验通过后设置Session,并设置SeesionId到cookiexxx.test.com
校验没有cookie跳到sso服务,sso服务发现用户已经登录,生成tgt参数添加到xxx.test.com
回跳
登出流程:
- 注销当前服务session,清除cookie,并重定向sso服务登出页面
- sso服务注销全局会话,通知其他服务销毁session
登录页面不统一
问:如果登录页面各个系统想不一样,二级域名也使用各个系统自己的,怎么办?
答:可以每个系统服务调用sso认证中心登录,登录后带着tgt参数重定向到不同二级域名去写入cookie,登出也需要重定向这些域名。但是如果二级域名很多体验就很差了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。