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 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协议...
在集成过程中,可能会遇到验证码需求,这里简述如何添加验证码功能: 1. **选择验证码库**:可以使用开源的验证码库,如`JCaptcha`或`Google reCAPTCHA`。 2. **配置验证码**:在`web.xml`中配置验证码过滤器,设置...
在一个帧中,TS0主要用于传送帧定位信号(FAS)、CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据等信息。...
北京选择软件公司张昀整理。 从整个单点登陆的方案着手,讲述了单点登陆的服务器构成、涉及到的技术、如何实现单点登陆。适合对单点登陆没多少概念的人员。
JDK1.8版本的`ConcurrentHashMap`进行了优化,参考了HashMap的改进,采用了数组+链表+红黑树的方式,并大量使用了CAS(Compare and Swap)操作,减少了锁的使用,进一步提高了并发性能。当链表长度超过一定阈值时,...
简述Java内存模型(JMM) volatile关键字知道么,它是怎么实现的?(难点 重要) sychronized和Lock(ReentrantLock)之间的区别? sychoronized的自旋锁、偏向锁、轻量级锁、重量级锁、分别介绍和联系 threadLocal会...
此外,它还支持单点登录(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 注解...
8. **接口设计**:如何连接SDRAM到系统总线,包括控制信号(如CS, RAS, CAS, WE)和地址、数据信号的管理。 9. **性能优化**:如突发传输(Burst Transfer)和页模式(Page Mode)等技术,可以提升连续数据访问的...
* 成分:1,1,1,2-四氟乙烷(CAS No.:811-97-2) * 浓度:100% 二、危险性概述和警示信息 * GHS 危险性类别:压力下气体、液化气体 * GHS 警示词:警告 * 危险性说明:内含压力下气体,遇热可能爆炸 * 危害防范...
3. **Verilog设计基础**:简述Verilog的基本语法和结构,如何创建模块,以及如何定义输入/输出接口。 4. **SDRAM控制器设计**:描述如何用Verilog实现一个SDRAM控制器,它负责生成正确时序来与SDRAM通信,确保数据...
4. **Java轻量级锁原理详解**:讨论了Java内存模型下的锁优化,包括轻量级锁如何避免重量级锁的性能开销,涉及到CAS操作、锁升级和锁消除等概念。 5. **Java类加载器体系结构**:深入解析Java的类加载过程,包括...
- 流程简述: 1. 客户端向服务器发起HTTPS请求。 2. 服务器生成公钥和私钥,并将公钥以及证书发送给客户端。 3. 客户端验证证书的有效性后,生成随机密码,并用公钥加密该密码后发送回服务器。 4. 服务器使用...
在一个帧中,TS0主要用于传送帧定位信号(FAS)、CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据等信息。...
7. **会计准则与审计**:简述国内和国际通用的会计准则,如中国的企业会计准则(CAS)和国际财务报告准则(IFRS),并介绍审计的基本概念和流程。 8. **财务分析**:介绍如何利用财务报表数据进行比率分析,评价...
4. **会计准则**:解释国内和国际的会计准则,如中国会计准则(CAS)和国际财务报告准则(IFRS),并可能涵盖准则的最新变化和修订。 5. **税务会计**:涉及企业所得税、增值税等税种的计算和申报,以及税收筹划的相关...
例如,“在医学领域,什么是基因编辑技术CRISPR-Cas9?” 4. **具体实例**:对于概念性的问题,可以提供具体的例子来引导回答。比如,“请用一个生活中的例子说明牛顿第三定律。” 5. **避免开放式问题**:ChatGPT...
二、简述题 1. 内存条选购要点包括:容量要满足需求,频率与主板兼容,品牌信誉好,延迟低,兼容性稳定。 2. 识别各类内存条主要看内存条上的标识,如 DDR 版本、容量、频率、金手指数目等。 3. 辨别 DDR 和 SDRAM ...
以上只是部分知识点的简述,Java面试题涉及广泛,包括但不限于并发编程、JVM内存管理、垃圾回收、Spring框架等,每个话题都值得深入探讨。在面试中,理解和掌握这些知识点将有助于回答各种技术问题。
2. **重定向至SSO认证中心**:如果用户未登录,系统A会将请求重定向到SSO认证中心(如CAS、KeyCloak或OAuth服务器)。 3. **用户认证**:用户在SSO认证中心输入用户名和密码进行登录。 4. **生成服务票证**:认证...