單點登出
目錄
<a href="#_Toc401242641">1.1 Cas Client端配置單點登出</a>
<a href="#_Toc401242642">1.2 Cas Server端禁用單點登出</a>
單點登出功能跟單點登入功能是相對應的,旨在通過Cas Server的登出使所有的Cas Client都登出。Cas Server的登出是通過請求“/logout”發生的,即如果你的Cas Server部署的通路路徑為“https://localhost:8443/cas”時,通過通路“https://localhost:8443/cas/logout”可以觸發Cas Server的登出操作,進而觸發Cas Client的登出。在請求Cas Server的logout時,Cas Server會将用戶端攜帶的TGT删除,同時回調該TGT對應的所有service,即所有的Cas Client。Cas Server中對應的TGT失效時預設也會觸發同樣的操作。Cas Client如果需要響應該回調,進而在Cas Client端進行登出操作的話就需要有對應的支援。具體來說,需要在Cas Client應用的web.xml檔案中添加如下Filter和Listener。
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>casSingleSignOutFilter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
</filter-mapping>
SingleSignOutFilter需要配置在所有Filter之前,當Cas Client通過Cas Server登入成功,Cas Server會攜帶生成的Service Ticket回調Cas Client,此時SingleSignOutFilter會将Service Ticket與目前的Session綁定在一起。當Cas Server在進行logout後回調Cas Client應用時也會攜帶該Service Ticket,此時Cas Client配置的SingleSignOutFilter将會使對應的Session失效,進而達到登出的目的。
SingleSignOutHttpSessionListener用于在Cas Client應用中的Session過期時将其從對應的映射關系中移除。
單點登出功能預設在Cas Server端是啟用的。可能因為某種原因使用者想禁用它。在Cas Server的WEB-INF/spring-configuration目錄下有一個argumentExtractorsConfiguration.xml檔案,其中定義了兩個ArgumentExtractor類型的bean,一個是針對于Cas協定的,一個是針對于SAMP1.1協定的,但是它們都定義了一個共同的屬性disableSingleSignOut,如下所示,該值對應的是一個屬性替換變量,預設為false。
<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 Server的所有屬性替換變量都是定義在WEB-INF/cas.properties檔案中的。是以如果需要禁用Cas Server的logout功能,我們可以在cas.properties檔案中指定“slo.callbacks.disabled=true”。
(注:本文是基于Cas Server3.5.2和Cas Client3.1.11所寫)