技术分享 CAS单点登录 服务端配置 查看内容

cas入门之二十三:单点登出基本机制

老高 | 发布于 2017-05-05 14:22| 浏览()| 评论() | 收藏() | 点赞() | 打印

摘要: ​cas支持单点登出了,那么它的基本机制是什么呢?

cas支持单点登出了,那么它的基本机制是什么呢?

当用户经cas认证成功之后,就可以访问集成于cas的所有应用,而无需登录。那么认证是基于cookie的,因为cas在cookie是放了tgt,这样用户就可以无须二次登录,就可以访问另外的应用。但是cas为了安全,会给tgt设置一个过期的期限。当tgt过期之后,则cas会轮训这个tgt所访问的cas client端应用,并向每个cas client端应用发送登出请求。当终端应用能够解析cas服务器所发出的登出请求,则执行session销毁动作,实现了退出。这样一个用户所访问的所有终端都退出了,就实现了单点退出。

关于cas client端的单点退出,请参看:cas client入门之三:单点登出


对于cas服务端向cas client端所发出的登出请求应用的是saml协议,类似如下形式:

<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="[RANDOM ID]" Version="2.0"
IssueInstant="[CURRENT DATE/TIME]">
    <saml:NameID>@NOT_USED@</saml:NameID>
    <samlp:SessionIndex>[SESSION IDENTIFIER]</samlp:SessionIndex>
</samlp:LogoutRequest>

cas服务端中cas.properties中的slo.callbacks.disabled 属性用来控制服务端单点登出的开关。它被cas\WEB-INF\spring-configuration\argumentExtractorsConfiguration.xml中

<bean id="casArgumentExtractor" class="org.jasig.cas.web.support.CasArgumentExtractor"
    p:httpClient-ref="noRedirectHttpClient"
    p:disableSingleSignOut="${slo.callbacks.disabled:false}" />   
<bean id="samlArgumentExtractor" class="org.jasig.cas.web.support.SamlArgumentExtractor"
    p:httpClient-ref="noRedirectHttpClient"
    p:disableSingleSignOut="${slo.callbacks.disabled:false}" />

所应用。

在默认情况,cas服务器在tgt过期的时候,会自动的发起单点登出请求,你可以通过

<bean id="ticketRegistryCleaner"
    class="org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner"
    p:ticketRegistry-ref="ticketRegistry"
    p:lock-ref="cleanerLock"
    p:logUserOutOfServices="false" />

中的logUserOutOfServices这个属性来打开或关闭cas服务器自动发起的单点登出请求。你可能会发现,这个单点登出是由ticket的cleaner触发的。

如果所用的ticket存储机制不使用或者不需要ticket cleaner,那么怎么办呢?答案是要么放弃单点登出,要么你自己实现(可能这个有点难)。

发表评论(对文章涉及的知识点还有疑问,可以在这里留言,老高看到后会及时回复的。)

表情