单点登录CAS框架的原理
一、什么是单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session和cookie是无法解决的,我们需要使用相关的单点登录技术来解决。
二、什么是CAS(Central Authentication Server )
CAS 是美国耶鲁大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
【1】开源的企业级单点登录解决方案。
【2】CAS Server 为需要独立部署的 Web 应用。
【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个Web 应用),包括Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。
三、SSO单点登录访问流程主要有以下步骤:
1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
3. 用户认证:用户身份认证。
4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
举个例子来解释下,比如用户通过浏览器先访问A系统www.a.com/pageA,这个pageA是个需要登录才能访问的页面,A系统发现用户没有登录,这时候系统需要做一件额外的操作,就是重定向到认证中心,www.sso.com/login?redirect=www.a.com/pageA”
什么后面要跟一个redirect的url呢?将来认证通过后,还要重定向到A系统来的。
浏览器会用这个www.sso.com/login?redirect=www.a.com/pageA 去访问认证中心,认证中心校验如果没登录过,认证中心就让用户去登录,登录成功以后,认证中心要做几件重要的事情:
1. 建立一个session。
2. 创建一个ticket (可以认为是个随机字符串)。
3. 然后再重定向到redirect的地址, url 中带着ticket : www.a.com/pageA?ticket=T123 与此同时cookie也会发给浏览器,比如:Set cookie : ssoid=1234, sso.com ”
A系统拿到ticket去认证中心再校验一次,校验通过则认为用户在认证中心已经登录过了,然后A系统给用户建立session,返回访问资源页面,给用户浏览器发一个cookie,属于A系统的cookie : Set cookie : sessionid=xxxx, a.com 。
用户再次访问A系统的另外一个受保护的页面www.a.com/pageA1,就不需要再去认证中心认证了,因为已经给用户浏览器发过A系统的cookie , 到时候浏览器自然会带过来,A系统就知道它登录过了。
如果用户访问A系统(www.a.com/pageA)时已经通过认证中心登录了, 然后再访问B系统www.b.com/pageB, 会发生什么状况呢?”
因为浏览器已经有了认证中心的cookie,直接发给认证中心注册就可以了,不需要用户登录了。