cas(一)

(一)CAS

一.            什么是CAS

       CAS  CentralAuthentication Service  Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO 

二.            CAS的特点

  •  开源的、多协议的 SSO 解决方案;Protocols Custom Protocol CAS OAuth OpenID RESTful API SAML1.1 SAML2.0 等。
  •  支持多种认证机制: Active Directory JAAS JDBC LDAP X.509 Certificates 等;
  •  安全策略:使用票据(Ticket )来实现支持的认证协议
  •  支持授权:可以决定哪些服务可以请求和验证服务票据(Service Ticket );
  •  提供高可用性:通过把认证过的状态数据存储在 TicketRegistry 组件中,这些组件有很多支持分布式环境的实现,  如: BerkleyDB Default EhcacheTicketRegistry JDBCTicketRegistry JBOSS TreeCache JpaTicketRegistry MemcacheTicketRegistry 等;
  •  支持多种客户端: Java .Net PHP Perl Apache, uPortal 等。

三.             什么是SSO

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

 

四.            SSO的原理

  • 一般SSO体系中的主要角色有三种:1、user(多个)    2.web应用(多个)  3.SSO认证中心(1个)
  • SSO实现模式的原则
    1.  所有的认证登录都在sso认证中心进行
    2. sso认证中心通过一些方法来告诉web应用当前访问用户究竟是不是已通过认证的用户
    3. sso认证中心和所有的web应用建立一种信任关系,也就是说web应用必须信任认证中心。(单点信任)

  • sso主要实现方式:cookie机制和session机制

    1.  weblogic通过session共享认证信息。session是一种服务器端机制,当客户端访问服务器时,服务器为客户端创建一个唯一的sessionID,以使在整个交互过程中始终保持状态,而交互的信息则可以由应用自行指定,因此用session方式实现SSO,不能再多个浏览器之间实现单点登录,但是却可以跨域。
    2.  websphere通过cookie记录认证信息。Cookie是一种客户端机制,它存储的内容主要包括:名字、值、过期时间、路径和域,路径与域合在一起就构成了cookie的作用范围,因此用cookie方式可以实现SSO,但域名必须相同。

  • 从结构体系看, CAS 包括两部分: CAS Server  CAS Client 

    1. CAS ServerCAS Server 负责完成对用户的认证工作 需要独立部署 CASServer 会处理用户名 密码等凭证(Credentials) 
    2. CAS Client负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。
    3. CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

  •  CAS 原理和协议

  1.   基础模式

基础模式 SSO 访问流程主要有以下步骤:

1. 访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

2. 定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

3. 用户认证:用户身份认证。

4. 发放票据: SSO 服务器会产生一个随机的 Service Ticket 

5. 验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

下面是 CAS 最基本的协议过程:

 


 

如上图: CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包含请求 Service Ticket( ST 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的;于是 CAS Client 会重定向用户请求到 CAS Server  Step 2 ),并传递 Service (要访问的目的资源地址)。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials  CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket ,并缓存以待将来验证,并且重定向用户到 Service 所在地址(附带刚才产生的 Service Ticket  并为客户端浏览器设置一个 Ticket GrantedCookie  TGC   CAS Client 在拿到 Service 和新产生的 Ticket 过后,在 Step 5  Step6 中与 CAS Server 进行身份核实,以确保 Service Ticket 的合法性。

在该协议中,所有与 CAS Server 的交互均采用 SSL 协议,以确保 ST  TGC 的安全性。协议工作过程中会有 次重定向 的过程。但是 CAS Client  CAS Server 之间进行 Ticket 验证的过程对于用户是透明的(使用 HttpsURLConnection )。

    CAS 请求认证时序图如下:

  

  •  CAS 如何实现 SSO

当用户访问另一个应用的服务再次被重定向到 CAS Server 的时候, CAS Server 会主动获到这个 TGC cookie ,然后做下面的事情:

1) 如果 User 持有 TGC 且其还没失效,那么就走基础协议图的 Step4 ,达到了 SSO 的效果;

2) 如果 TGC 失效,那么用户还是要重新认证 走基础协议图的 Step3) 

 

  • 代理模式

该模式形式为用户访问 App1  App1 又依赖于 App2 来获取一些信息,如: User -->App1 -->App2

这种情况下,假设 App2 也是需要对 User 进行身份验证才能访问,那么,为了不影响用户体验(过多的重定向导致 User  IE 窗口不停地闪动  CAS 引入了一种 Proxy 认证机制,即 CAS Client 可以代理用户去访问其它 Web 应用。

代理的前提是需要 CAS Client 拥有用户的身份信息 类似凭据 。之前我们提到的 TGC 是用户持有对自己身份信息的一种凭据,这里的 PGT 就是 CAS Client 端持有的对用户身份信息的一种凭据。凭借TGC  User 可以免去输入密码以获取访问其它服务的 Service Ticket ,所以,这里凭借 PGT  Web应用可以代理用户去实现后端的认证,而 无需前端用户的参与 

下面为代理应用( helloService )获取 PGT 的过程: (注: PGTURL 用于表示一个 Proxy 服务,是一个回调链接; PGT 相当于代理证; PGTIOU 为取代理证的钥匙,用来与 PGT 做关联关系;)

  

如上面的 CAS Proxy 图所示, CAS Client 在基础协议之上,在验证 ST 时提供了一个额外的PGT URL( 而且是 SSL 的入口  CAS Server ,使得 CAS Server 可以通过 PGT URL 提供一个 PGT  CAS Client 

CAS Client 拿到了 PGT(PGTIOU-85  ..ti2td) ,就可以通过 PGT 向后端 Web 应用进行认证。

下面是代理认证和提供服务的过程:

如上图所示, Proxy 认证与普通的认证其实差别不大, Step1  与基础模式的 Step1,2 几乎一样,唯一不同的是, Proxy 模式用的是 PGT 而不是 TGC ,是 Proxy Ticket  PT )而不是 Service Ticket 


CAS  SSO 实现方式可简化理解为:  Cookie   Session  CAS Server 创建 cookie,在所有应用认证时使用,各应用通过创建各自的 Session 来标识用户是否已登录。

用户在一个应用验证通过后,以后用户在同一浏览器里访问此应用时,客户端应用中的过滤器会在 session 里读取到用户信息,所以就不会去 CAS Server 认证。如果在此浏览器里访问别的 web 应用时,客户端应用中的过滤器在 session 里读取不到用户信息,就会去 CAS Server  login 接口认证,但这时CAS Server 会读取到浏览器传来的 cookie  TGC ),所以 CAS Server 不会要求用户去登录页面登录,只是会根据 service 参数生成一个 Ticket ,然后再和 web 应用做一个验证 ticket 的交互而已。

CAS 安全性

CAS 的安全性仅仅依赖于 SSL 。使用的是 secure cookie 

TGC/PGT 安全性

对于一个 CAS 用户来说,最重要是要保护它的 TGC ,如果 TGC 不慎被 CAS Server 以外的实体获得, Hacker 能够找到该 TGC ,然后冒充 CAS 用户访问 所有 授权资源。 PGT 的角色跟 TGC 是一样的。

从基础模式可以看出, TGC  CAS Server 通过 SSL 方式发送给终端用户,因此,要截取 TGC 难度非常大,从而确保 CAS 的安全性。

TGT 的存活周期默认为 120 分钟。

ST/PT 安全性

ST  Service Ticket )是通过 Http 传送的,因此网络中的其他人可以 Sniffer 到其他人的 Ticket  CAS 通过以下几方面来使 ST 变得更加安全(事实上都是可以配置的):

1   ST 只能使用一次

CAS 协议规定,无论 Service Ticket 验证是否成功, CAS Server 都会清除服务端缓存中的该Ticket ,从而可以确保一个 Service Ticket 不被使用两次。

2   ST 在一段时间内失效

CAS 规定 ST 只能存活一定的时间,然后 CAS Server 会让它失效。默认有效时间为 分钟。

3   ST 是基于随机数生成的

ST 必须足够随机,如果 ST 生成规则被猜出, Hacker 就等于绕过 CAS 认证,直接访问 对应的服务。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值