天天看点

单点登录cas

一、概述 

单点登录SSO(Single Sign On):单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一,SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

       我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

       网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有。开源的有OpenSSO、CAS ,微软的AD SSO,及基于kerberos 的SSO等。

单点登录cas

SSO特点:

  1. 一个账户:嗯,规定所有系统统一使用相同账户,就能保证一个账户了;
  2. 一次登录全部访问:通过SSO登录后,让其告知其它各个系统保存该用户的信息,用户就不用重复多次的登录了;

二、主要名词

1、TGC:Ticket-granting cookie,存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,是CAS Server用来明确用户身份的凭证。TGT封装了TGC值以及此Cookie值对应的用户信息。

2、TGT:ticket granting ticket,TGT对象的ID就是TGC的值,在服务器端,通过TGC查询TGT。

3、ST:service ticket,CAS为用户签发的访问某一service的票据,ST是TGT签发的。

4、PGT:proxy granting ticket,代理模式下的TGT

5、PT:proxy ticket,代理模式下的ST

6、service:在cas系统中,接入的各个子系统叫服务。因为对普通用户来说,每一个接入到cas认证中心的子系统都提供特定的服务比如商城、bbs等,大家都听过软件即服务,平台即服务,这样理解service就通顺了

    SaaS:Software-as-a-Service,软件即服务

    PaaS:Platform as a Service,平台即服务

7、credentials,凭证,即待认证的用户的信息载体,如用户名+密码

8、Principal,当事人,即认证之后返回的已认证的当事人的信息载体,默认只返回用户ID即用户名。

9、Authentication表示一个完成的认证请求,当然,结果可能是凭证有效或无效,他有一个method可以获取Principal

三、架构原理

        CAS 是 Yale 大学发起的一个开源项目,CAS(Central Authentication Service)是基于Kerberos票据方式实现SSO单点登录的框架,旨在为 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。

协议过程框架图:

单点登录cas
  1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
  2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
  3. 用户认证:用户身份认证。
  4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
  5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
  6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

        从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。(CAS Client称之为系统X, CAS Server称之为认证中心)

首次登陆:

 1)浏览器首次访问系统A,CASFilter截获请求,A获取不到JSessionID发现未登录,系统A将浏览器重定向到认证中心;

 2)认证中心获取全局票据,未获取到,认定用户未登录给用户跳转到登录页进行登录。认证成功之后给浏览器生成一个全局票据(一般存放在cookie中称之为TGC--Ticket Granting Cookie,出于安全考虑TGC经过加密并且有时效性,关闭浏览器会自动过期),然后重定向到系统A并且附上临时票据(Service Ticket由认证中心随机生成并发放给用户的身份标志是一种一次性信任凭证);

 3)系统A的CASFilter截获请求,获取临时票据,获取到之后将临时票据传给认证中心确认(票据由认证中心生成,几乎不可伪造,标志用户身份)。认证中心通过认证之后将用户信息返回给系统A,系统A将浏览器请求授权资源返回; 

已登录状态访问系统B:

1)浏览器访问系统B,CASFilter截获请求,系统B获取JSessionID,未获取到,重定向至认证中心;

2)认证中心获取全局票据,获取到之后认定用户已经登录,认证中心发放系统B的临时票据,并重定向至系统B;

3)系统B获取临时票据,获取到之后将临时票据传给认证中心确认,认证中心通过认证之后将用户信息返回给系统B,系统B将浏览器请求资源返回;

登出操作:

        执行登出操作,当前系统会将登出请求重定向到认证中心(CAS Server),认证中心在收到登出请求后获取TGC清除对应session,同时通知所有通过此TGC对应的TGT直接或者间接签发授权的系统(CAS Client)消除session。

单点登录cas

继续阅读