SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
- 一、SSO概念
- 二、CAS的原理
- 三、认证流程
- A、首次访问受限资源时
- B、第二次访问该系统
- C、首次访问其他系统
- 四、淘宝SSO系统架构设计以及实现
- A、同步登录状态
- B、校验登录状态
- C、验证票据
- 五、SSO实战
一、SSO概念
单web系统中,客户端与服务器仅建立单一会话,只需要登录成功后写入Cookie,每次请求都携带该Cookie,服务器端只验证Cookie是否有效,即可判断是否登录。
抽象出认证系统之后,单点登录系统需要完成两个主要工作,全局会话的保持和局部会话的保持。客户端与业务系统之间是局部会话,与SSO系统之间是全局会话。SSO系统分为两部分,SSO服务端和SSO客户端,服务端则SSO认证系统,客户端将集成进入业务系统,负责局部会话的新增、删除、验证。
二、CAS的原理
基本上所有的SSO系统,所会对CAS有所借鉴。
如果登录,直接跳转,即执行:
response.sendRedirect(urlToRedirectTo);
B、第二次访问该系统
第二次访问该系统,会在该域名下存在上一步写的cookie,请求该系统时携带cookie,所有filter不会拦截该请求,直接返回资源。
四、淘宝SSO系统架构设计以及实现
淘宝的SSO系统是比较有新意的,除了校验登录状态模块,还加入同步登录状态模块,这样就让电商项目在SSO中变得很灵活。
A、同步登录状态
当用户请求到需要登录的数据资源时会被校验登录状态的filter拦截,出现以下两种情况:
- 同步跳转请求,如果没有登录,直接重定向到登录页
- 异步Ajax请求,会直接返回登录状态和rederectUrl、loginUrl,由JavaScript控制跳转到登录地址
C、验证票据
如果SSO服务端登录成功,会携带token请求回SSO客户端,客户端验证token的filter拦截请求,与SSO服务端验证token有效性。如果通过,则返回用户基本信息、cookie 值等,所有的cookie值都是由SSO服务端发出的。
五、SSO实战
目标:基于Token、支持跨顶级域名的SSO系统。
涉及系统:
- 登录中心:SSO系统,负责处理SSO全部逻辑,域名为localhost:6061
- 业务系统A:某个具体的业务系统,需要通过SSO系统实现登录,域名假定为localhost:6060
- 业务系统B:某个具体的业务系统,需要通过SSO系统实现登录,域名假定为localhost:7070
对于业务系统A或业务系统B都能够通过登录中心实现用户登录,并且用户只需要在A和B中的任意一个业务系统进行登录,另一个业务系统就能够自动登录。