跟登陆一样,登出操作也很重要.由于是多应用间操作,状态保持也是一个要点,根据登出的影响范围,可以将登出操作分为两类:
- 单应用登出
- 单点登出(多应用登出)
顾名思义,单应用登出即登出只影响被操作的应用会话,其他应用和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就会退出整个业务逻辑,后续的功能应该是应用自身完成.