1.简介
SSO:英文全称Single Sign On,单点登陆。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。一般SSO体系中主要角色有三种:User(多个)、Web应用(多个)、SSO认证中心(一个)。
2. 较流行的实现手段
单点登陆最有名的开源方案当属CAS,全称为Central Authentication Service即中央认证服务。CAS是由Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法
除此之外,为了促进业务的进一步发展,必须允许第三方应用接入,由此引申出用户管理的第二个模块:授权登陆。现在流行的授权登陆就是OAuth2.0协议,基本上已经成为事实上的标准,其他私有协议漏洞多,第三方接入也麻烦。
3. 具体实现
3.1. CAS
基础模式 SSO 访问流程主要有以下步骤:
1. 访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。
2. 定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。
3. 用户认证:用户身份认证。
4. 发放票据: SSO 服务器会产生一个随机的 Service Ticket 。
5. 验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。
6. 传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。
下面是 CAS 最基本的协议过程:
3.2 Session共享
基于Redis的Session共享方案。将Session存储于Redis上,然后将整个系统的全局Cookie Domain设置于顶级域名上,这样SessionID就能在各个子系统间共享。
缺点:
1.redis中的session存储对象每个子系统都要存在,导致session使用诸多限制。
2.跨顶级域名无法处理。
3.3基于openId的单点登陆
为了保证多终端登陆,每次用户通过用户名/密码登录时,产生一个OpenId保存在Redis里,并且设定过期时间,这样多个终端登录就会有多个OpenId与之对应,不再会存在一个OpenId失效所有终端验证都失效的情况。