CAS SSO基本工作原理

本文探讨了CAS SSO(以3.4.5版本为例)的基本原理,以一个包含webapp1和webapp2(基于Spring Security 3)的应用场景为例。分析中涉及的主要阶段包括:1)用户尝试访问被保护的应用;2)重定向至CAS服务器进行身份验证;3)CAS服务器验证成功后返回服务票证;4)应用验证票证并创建会话。整个过程确保了单一登录体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面分析下CAS SSO(以3.4.5为例)的基本工作原理。先假定一个应用场景,如图,有两个Web应用分别是webapp1、webapp2(Spring Security 3应用) 。一个认证服务器CAS(假设部署在http://domain-cas/cas-server)。我们看三个典型阶段:

 

 

一、未登录用户访问webapp1应用

1. 用户发起起始请求到某一应用。如网址 http://domain-webapp1/page1

2. 作为CAS Client的webapp1应用,CAS_FILTER过滤器将截获请求,检查是否已登录。如已登录,直接返回请求响应。如没有,返回302浏览器redirect转向CAS认证服务器,并带上自己应用作为cas client已经配好的service地址。如

http://domain-cas/cas-server/?service=http://domain-webapp1/j_spring_cas_security_check

 

对SS3的应用webapp1来说,service地址的配置要点如下:

 

	<beans:bean id="casService" class="org.springframework.security.cas.ServiceProperties"> 
		<beans:property name="service" value="http://domain-webapp1/j_spring_cas_security_check"/> 
	</beans:bean> 

 

3. CAS首先查看用户请求是否携带CASTGC名称的Cookie(CASTGC这个名称在CAS中的ticketGrantingTicketCookieGenerator.xml中可配置)。如没有或已过期认证未通过,输出CAS登录页面

 

4. 用户输入认证信息提交,如认证通过,CAS设置CASTGC Cookie。(类似CASTGC=TGT-2-IsNtxgv3h9dVi44B3zprQm5AGFbKB3ZBMGjtVumgC5E10VqbHF-cas; path=/cas; domain=localhost)  同时redirect到webapp1应用的service地址,并附上CAS为此service设置的ticket。如


http://domain-webapp1/j_spring_cas_security_check?ticket=ST-2-JWzXJKrXXGy7vAm6rEhA-cas 


5. webapp1和CAS进行交互,验证ticket有效后,再次redirect用户浏览器到用户起始请求地址:http://domain-webapp1/page1

redirect到cas进行校验的url配置要点如下:
 
  	<beans:bean id="casTicketValidator" class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"> 
   		<beans:constructor-arg value="http://domain-cas/cas-server/"/> 
	</beans:bean> 

这个校验接口,在CAS中的cas.properties文件中定义
 
 
cas.securityContext.ticketValidator.casServerUrlPrefix=http://domain-cas/cas-server/

 




6. 此时webapp1应用已经有了验证通过的用户信息,redirect返回正常页面内容。


二、已登录用户首次访问webapp2应用


7. 用户发起起始请求,到某一应用。网址 http://domain-webapp2/page2

8. webapp2应用按常规(如根据session)检查是否已经登录。 如没有,则redirect用户浏览器转向CAS认证服务器,并带上自己的spring cas client已经配好的service地址。如

http://domain-cas/cas-server/?service=http://domain-webapp2/j_spring_cas_security_check

9. CAS首先查看用户浏览器是否携带CASTGC Cookie,此时webapp1已为浏览器设置,如CASTGC有效验证通过,则redirect到webapp2应用的service地址,并附上CAS为此service设置的ticket。

10. webapp2和CAS进行交互,验证ticket有效后,再次redirect用户浏览器到用户起始请求地址:http://domain-webapp2/page2

11. 此时webapp2应用已经有了验证通过的用户信息,返回正常页面内容。


三、Logout情况
 
假设用户在webapp1和webapp2中都访问过,此时从webapp1中登出。spring cas client所做的工作是:
1. webapp1首先清除自己应用的session用户登录信息。
2. 然后访问CAS的 /logout接口,清除CAS中的登录信息。同时CAS向所有service发出注销请求(CAS Server端,参见org.jasig.cas.web.LogoutController,其调用org.jasig.cas.CentralAuthenticationServiceImpl 的destroyTicketGrantingTicket方法,最后调用org.jasig.cas.authentication.principal.AbstractWebApplicationService的logOutOfService方法。CAS Client端,参见cas-client-core jar包中的org.jasig.cas.client.session.SingleSignOutFilter这个过滤器在SS 配置文件中配置),删除CAS Client中的session,清除登录信息,因此webapp2中的登录信息也将清除。
3. 此时用户如再次访问webapp2时,将转向CAS登录页面。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值