跟登陸一樣,登出操作也很重要.由於是多應用間操作,狀態保持也是一個要點,根據登出的影響范圍,可以將登出操作分為兩類:
- 單應用登出
- 單點登出(多應用登出)
顧名思義,單應用登出即登出只影響被操作的應用會話,其他應用和CAS會話狀態不受影響.這也就需要你退出每一個應用,如果應用數量較多,每次退出可能都是件力氣活.單點登出是結束SSO會話,所有建立在SSO會話上的的應用會話都會進行登出.使用戶的狀態保持一致.當應用間會話記錄不一致時,登出操作可能會造成會話記錄丟失;
- 登出操作:
/logout?service=http://redirectUrl
根據CAS協議,/logout終點可以銷毀當前SSO回話.
根據重定向配置的不同,可以分為三種方式:
第一種:全局重定向
在cas的配置文件中,通過cas.logout.redirectUrl參數可以定義全局重定向地址.
第二種:參數重定向
通過service參數定義登出重定向地址,啟用service參數需要在允許服務重定向,相關配置如下:
cas.logout.followServiceRedirects=true cas.logout.redirectParameter=service cas.logout.redirectUrl=https://www.github.com cas.logout.confirmLogout=false cas.logout.removeDescendantTickets=true
第三種:服務級別重定向
在注冊服務中定義logoutUrl參數進行定義重定向地址;
{ "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId" : "testId", "name" : "testId", "id" : 1, "logoutType" : "BACK_CHANNEL", "logoutUrl" : "https://web.application.net/logout" }
logoutType:分為FRONT_CHANNEL,BACK_CHANNEL
FRONT_CHANNEL:顯示登出.cas直接發送http post請求到服務;
BACK_CHANNEL:隱式登出.cas發送異步ajax get請求到已認證服務.通過cas客戶端使應用會話失效;
- 關閉單點登出:
需要在cas配置文件中增加如下配置,單點登出默認開啟
cas.slo.disabled=true cas.slo.asynchronous=true
- SSO會話和應用會話
SSO會話是CAS通過TicketGrantingTicket和TGC進行狀態保持而建立的會話;
應用會話:應用進行狀態保持而建立的會話;
CAS不是一個應用會話管理工具,應用會話管理應該是應用自身的職責.當認證工作完成之后,CAS就會退出整個業務邏輯,后續的功能應該是應用自身完成.