`
hunter006
  • 浏览: 7029 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS简述(转)

阅读更多
1.    单点登录概述

所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,仅仅一次。 SSO解决方案(比如,CAS)负责统一认证用户,如果需要,SSO也可以完成用户的授权处理。可以看出,当企业用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。在实施SSO后,所用的认证操作都将交给SSO认证中心。现有的SSO解决方案非常多,比如微软的MSN Passport便是典型的SSO解决方案,各Java EE容器都提供了自身的专有SSO能力。
2.    CAS的总体架构
1.     CAS简介

CAS(中央认证服务)是建立在非常开放的协议之上的企业级SSO解决方案。诞生于2001年,在2002年发布了CAS2.0协议,这一新的协议提供了Proxy(代理)能力,此时的CAS2.0支持多层SSO能力。到2005年,CAS成为了JA-SIG旗下的重要子项目。由于CAS2.0版本的可扩展能力不是非常完美,而且他的架构设计也不是很卓越,为了使得CAS能够适用于更多场合,JA-SIG打算开发出同时遵循CAS1.0和 CAS2.0协议的CAS3.X版本。

现在的CAS3全面拥抱Spring技术,比如Spring DI容器和AOP技术、Spring Web MVC、Spring Web Flow、Spring Ldap Template等。

通常,CAS3由两部分内容构成:CAS3服务器和CAS客户端。由于CAS2.0协议借助于XML数据结构与客户进行交互,因此开发者可以使用各种语言编写的CAS3客户与服务器进行通信。CAS3服务器采用纯Java开发而成,它要求目标运行环境实现了Servlet2.4+规范、提供Java SE 1.4+支持。如果宿主CAS3服务器的目标Java EE容器仅仅实现了Servlet2.3-规范,则在对CAS3服务器进行少量的改造后,CAS3也能运行其中。

运行时,CAS3服务器仅仅是一个简单的Web应用,使用者只需要将cas.war直接丢到目标Java EE容器后,即完成了CAS3的部署。
2.     CAS词汇概念

TGC(ticket-granting cookie)--------- 受权的票据证明
KDC( Key Distribution Center ) ---------- 密钥发放中心
Service ticket(ST) --------- 服务票据, 由 KDC 的 TGS 发放。 任何一台 Workstation 都需要拥有一张有效的 Service Ticket 才能访问域内部的应用 (Applications) 。 如果能正确接收 Service Ticket ,说明在 CASClient-CASServer 之间的信任关系已经被正确建立起来,通常为一张数字加密的证书
Ticket Granting tieckt(TGT) --------- 票据授权票据,由 KDC 的 AS 发放。即获取这样一张票据后,以后申请各种其他服务票据 (ST) 便不必再向 KDC 提交身份认证信息 ( 准确术语是 Credentials) 。
authentication service (AS) --------- 认证用服务,索取 Crendential ,发放 TGT
ticket-granting service (TGS) --------- 票据授权服务,索取 TGT ,发放 ST
3.     CAS工作原理

CAS的单点登录的认证过程,所用应用服务器受到应用请求后,检查ST和TGT,如果没有或不对,转到CAS认证服务器登录页面,通过安全认证后得到ST和TGT,再重新定向到相关应用服务器,在回话生命周期之内如果再定向到别的应用,将出示ST和TGT进行认证,注意,取得TGT的过程是通过 SSL安全协议的。

如果通俗形象地说就是:相当于用户要去游乐场,首先要在门口检查用户的身份 ( 即 CHECK 用户的 ID 和 PASS), 如果用户通过验证,游乐场的门卫 (AS) 即提供给用户一张门卡 (TGT)。

这张卡片的用处就是告诉游乐场的各个场所,用户是通过正门进来,而不是后门偷爬进来的,并且也是获取进入场所一把钥匙。

现在用户有张卡,但是这对用户来不重要,因为用户来游乐场不是为了拿这张卡的而是为了游览游乐项目,这时用户摩天楼,并想游玩。

这时摩天轮的服务员 (client) 拦下用户,向用户要求摩天轮的 (ST) 票据,用户说用户只有一个门卡 (TGT), 那用户只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下。

票据授权机 (TGS) 就根据用户现在所在的摩天轮,给用户一张摩天轮的票据 (ST), 这样用户有了摩天轮的票据,现在用户可以畅通无阻的进入摩天轮里游玩了。

当然如果用户玩完摩天轮后,想去游乐园的咖啡厅休息下,那用户一样只要带着那张门卡 (TGT). 到相应的咖啡厅的票据授权机 (TGS) 刷一下,得到咖啡厅的票据 (ST) 就可以进入咖啡厅

当用户离开游乐场后,想用这张 TGT 去刷打的回家的费用,对不起,用户的 TGT 已经过期了,在用户离开游乐场那刻开始,用户的 TGT 就已经销毁了 。
3.    CAS的实现原理

由于CAS是基于Cookie的服务,所以它使用了Spring CookieGenerator来生成相应Cookie,下面的代码段摘自与CAS服务器的WEB-INF/中的cas-server.xml配置文件。
<bean id="ticketGrantingTicketCookieGenerator"
              class="org.springframework.web.util.CookieGenerator">
              <property name="cookieSecure" value="true" />
              <property name="cookieMaxAge" value="-1" />
              <property name="cookieName" value="CASTGC" />
              <property name="cookiePath" value="/cas" />
       </bean>

一旦用户登录到CAS服务器后,可以借助于URL为/cas/logout的地址退出,并且这种logout结果将导致浏览器中已存储的Cookie被销毁掉,即销毁CAS与当前用户间已建立的信任关系(Web SSO会话)。
1.     AuthenticationHandler认证处理器

浏览项目的web.xml,可以发现如下内容:
<context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>
                     /WEB-INF/applicationContext.xml,
                     /WEB-INF/deployerConfigContext-acegi.xml
              </param-value>
       </context-param>
       <listener>
              <listener-class>
                     org.jasig.cas.web.init.SafeContextLoaderListener
              </listener-class>
       </listener>

SafeContextLoaderListener实现了SafeContextListener,它借助于ContextLoader -Listener装载Spring DI容器。这样做的原因是因为Spring在通过ContextLoaderLitener启动时可能出现异常,造成整个CAS不能正常启动,经过 SafeContextLoaderListener,则在异常发生时,CAS服务器也可以启动。

在deployerConfigContext.xml中,可以看到只定义了一个Bean:
<beans>
       <bean id="authenticationManager"
              class="org.jasig.cas.authentication.AuthenticationManagerImpl">
              <property name="credentialsToPrincipalResolvers">
                     <list>
                            <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />
                            <bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
                     </list>
              </property>
              <property name="authenticationHandlers">
                     <list>
                            <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" />
                            <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
                     </list>
              </property>
       </bean>
</beans>

SimpleTestUsernamePasswordAuthenticationHandler的作用是如果用户名与密码输入一样,则通过系统认证。这个是开发过程中常用的一个handler,但是在开发完毕后应该除去。

AuthenticationManagerImpl负责认证用户,比如一个admin/admin用户是否合法就是它来验证的。 AuthenticationManagerImpl对象会借助于他引用的credentialsToPr -incipalResolvers和authenticationHandlers集合完成用户的认证工作。Authentication -Handlers负责完成用户认证,而credentialsToPrincipalResolvers负责构建认证结果。其中,并不是 authenticationHandlers的全部集合都参与到用户认证中,一旦某个AuthenticationHandler成功完成用户的认证,则认证进程就到此为止,进而转到credenti -alsToPrincipalResolvers来构建认证结果。credentialsToPrincipalResolvers的过程也类似于此。
2.     CAS的时序图
http://hi.baidu.com/wmqxyh/blog/item/02e4d70b9fff7289d1581b8f.html
分享到:
评论

相关推荐

    CAS单点登录系统.doc

    下面简述CAS Server的安装步骤: 1. **下载CAS Server和CAS Client**:从官方网址下载所需的版本,例如cas-server-3.3.1-release.tar.gz和cas-client-java-3.0.0.zip。 2. **安装SSL证书**:由于CAS认证基于SSL协议...

    使用CAS整合CXF实现单点登录部署步骤

    在集成过程中,可能会遇到验证码需求,这里简述如何添加验证码功能: 1. **选择验证码库**:可以使用开源的验证码库,如`JCaptcha`或`Google reCAPTCHA`。 2. **配置验证码**:在`web.xml`中配置验证码过滤器,设置...

    E1信道的帧结构简述

    在一个帧中,TS0主要用于传送帧定位信号(FAS)、CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据等信息。...

    简述单点登陆方案(基于中心认证模式)

    北京选择软件公司张昀整理。 从整个单点登陆的方案着手,讲述了单点登陆的服务器构成、涉及到的技术、如何实现单点登陆。适合对单点登陆没多少概念的人员。

    ConcurrentHashMap的实现原理(JDK1.7和JDK1.8).pdf

    JDK1.8版本的`ConcurrentHashMap`进行了优化,参考了HashMap的改进,采用了数组+链表+红黑树的方式,并大量使用了CAS(Compare and Swap)操作,减少了锁的使用,进一步提高了并发性能。当链表长度超过一定阈值时,...

    java并发编程面试题分享给需要的同学.docx

    简述Java内存模型(JMM) volatile关键字知道么,它是怎么实现的?(难点 重要) sychronized和Lock(ReentrantLock)之间的区别? sychoronized的自旋锁、偏向锁、轻量级锁、重量级锁、分别介绍和联系 threadLocal会...

    acegi 入门培训教程

    此外,它还支持单点登录(CAS)、信道安全管理和缓存功能。 2. **Acegi Security发展历程** Acegi Security起源于2003年,最初是作为Spring的扩展项目,称为"Spring的Acegi安全系统"。随着时间的推移,它逐渐成熟...

    面试真题目录大全,详细版

    1. 机器学习算法(选择一种简述其原理) 2. 新浪网站和头条的新闻推荐算法分析 其他 1. JVM 的参数调整(Xss、Xmx) 2. JVM 的垃圾收集器(CMS、G1等) 3. ThreadLocal 的作用 4. SpringMVC 的 @Autowired 注解...

    sdram.zip_sdram_sdram vhdl

    8. **接口设计**:如何连接SDRAM到系统总线,包括控制信号(如CS, RAS, CAS, WE)和地址、数据信号的管理。 9. **性能优化**:如突发传输(Burst Transfer)和页模式(Page Mode)等技术,可以提升连续数据访问的...

    制冷剂R32安全技术说明书(MSDS).docx

    * 成分:1,1,1,2-四氟乙烷(CAS No.:811-97-2) * 浓度:100% 二、危险性概述和警示信息 * GHS 危险性类别:压力下气体、液化气体 * GHS 警示词:警告 * 危险性说明:内含压力下气体,遇热可能爆炸 * 危害防范...

    tut_DE2_sdram_verilog_DE2verilog_sdram_memory_

    3. **Verilog设计基础**:简述Verilog的基本语法和结构,如何创建模块,以及如何定义输入/输出接口。 4. **SDRAM控制器设计**:描述如何用Verilog实现一个SDRAM控制器,它负责生成正确时序来与SDRAM通信,确保数据...

    心得.rar心得.rar

    4. **Java轻量级锁原理详解**:讨论了Java内存模型下的锁优化,包括轻量级锁如何避免重量级锁的性能开销,涉及到CAS操作、锁升级和锁消除等概念。 5. **Java类加载器体系结构**:深入解析Java的类加载过程,包括...

    JAVA宝典.docx

    - 流程简述: 1. 客户端向服务器发起HTTPS请求。 2. 服务器生成公钥和私钥,并将公钥以及证书发送给客户端。 3. 客户端验证证书的有效性后,生成随机密码,并用公钥加密该密码后发送回服务器。 4. 服务器使用...

    E1-CE1-T1-PRI-BRI知识介绍和配置.doc

    在一个帧中,TS0主要用于传送帧定位信号(FAS)、CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据等信息。...

    高教类课件:财务会计 第二套.zip

    7. **会计准则与审计**:简述国内和国际通用的会计准则,如中国的企业会计准则(CAS)和国际财务报告准则(IFRS),并介绍审计的基本概念和流程。 8. **财务分析**:介绍如何利用财务报表数据进行比率分析,评价...

    会计 - 已改.zip

    4. **会计准则**:解释国内和国际的会计准则,如中国会计准则(CAS)和国际财务报告准则(IFRS),并可能涵盖准则的最新变化和修订。 5. **税务会计**:涉及企业所得税、增值税等税种的计算和申报,以及税收筹划的相关...

    怎样提问ChatGPT能得到想要的答案.zip

    例如,“在医学领域,什么是基因编辑技术CRISPR-Cas9?” 4. **具体实例**:对于概念性的问题,可以提供具体的例子来引导回答。比如,“请用一个生活中的例子说明牛顿第三定律。” 5. **避免开放式问题**:ChatGPT...

    计算机组装与维修试题无答案

    二、简述题 1. 内存条选购要点包括:容量要满足需求,频率与主板兼容,品牌信誉好,延迟低,兼容性稳定。 2. 识别各类内存条主要看内存条上的标识,如 DDR 版本、容量、频率、金手指数目等。 3. 辨别 DDR 和 SDRAM ...

    JAVA面试题.docx

    以上只是部分知识点的简述,Java面试题涉及广泛,包括但不限于并发编程、JVM内存管理、垃圾回收、Spring框架等,每个话题都值得深入探讨。在面试中,理解和掌握这些知识点将有助于回答各种技术问题。

    跨服务器登录验证(单点登录SSO)过程和Java实现

    2. **重定向至SSO认证中心**:如果用户未登录,系统A会将请求重定向到SSO认证中心(如CAS、KeyCloak或OAuth服务器)。 3. **用户认证**:用户在SSO认证中心输入用户名和密码进行登录。 4. **生成服务票证**:认证...

Global site tag (gtag.js) - Google Analytics