Cas实现单点登出(single sign out)功能实现原理

本文详细介绍了CAS单点登出的工作原理,通过两张图示展示了单点登录和登出的过程。在单点登出时,CAS服务器检测TGC Cookie并清除相关session,同时向所有应用服务器发送登出请求,应用服务器解析请求删除session,从而实现全局登出。在应用服务器的web.xml中需配置相应的过滤器来支持这一功能。文章还分析了CAS server端的源代码,特别是CentralAuthenticationServiceImpl和AbstractWebApplicationService的角色,帮助读者深入理解其实现细节。

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

关于Cas实现单点登入(single sing on)功能的文章在网上介绍的比较多,想必大家多多少少都已经有所了解,在此就不再做具体介绍。如果不清楚的,那只能等我把single sign on这块整理出来后再了解了。当然去cas官方网站也是有很多的文章进行介绍。cas官网http://www.ja-sig.org/products/cas/。

ok,现在开始本文的重点内容讲解,先来了解一下cas 实现single sign out的原理,如图所示:





                                        图一




                                    图二

第一张图演示了单点登陆的工作原理。
第二张图演示了单点登出的工作原理。

从第一张图中,当一个web浏览器登录到应用服务器时,应用服务器(application)会检测用户的session,如果没有session,则应用服务器会把url跳转到CAS server上,要求用户登录,用户登录成功后,CAS server会记请求的application的url和该用户的sessionId(在应用服务器跳转url时,通过参数传给CAS server)。此时在CAS服务器会种下TGC Cookie值到webbrowser.拥有该TGC Cookie的webbrowser可以无需登录进入所有建立sso服务的应用服务器application。

在第二张图中,当一个web浏览器要求登退应用服务器,应用服务器(application)会把url跳转到CAS server上的 /cas/logout url资源上,

CAS server接受请求后,会检测用户的TCG Cookie,把对应的session清除,同时会找到所有通过该TGC sso登录的应用服务器URL提交请求,所有的回调请求中,包含一个参数logoutRequest,内容格式如下:

<samlp:LogoutRequest ID="[RANDOM ID]" Version="2.0" IssueInstant="[CURRENT DATE/TIME]">
<saml:NameID>@NOT_USED@</saml:NameID>
<samlp:SessionIndex>[SESSION IDENTIFIER]</samlp:SessionIndex>
</samlp:LogoutRequest>


所有收到请求的应用服务器application会解析这个参数,取得sessionId,根据这个Id取得session后,把session删除。
这样就实现单点登出的功能。

知道原理后,下面是结合源代码来讲述一下内部的代码怎么实现的。
首先,要实现single sign out在 应用服务器application端的web.xml要加入以下配置

<filter>
   <filter-name>CAS Single Sign Out Filter</filter-name>
   <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>CAS Single Sign Out Filter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>


注:如果有配置CAS client Filter,则CAS Single Sign Out Filter 必须要放到CAS client Filter之前。

配置部分的目的是在CAS server回调所有的application进行单点登出操作的时候,需要这个filter来实现session清楚。

主要代码如下:

org.jasig.cas.client.session.SingleSignOutFilter
 1 public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain      
 2 
 3 filterChain) throws IOException, ServletException {
 4         final HttpServletRequest request = (HttpServletRequest) servletRequest
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值