看看 jasig 文档:http: //jasig.github.io/cas/development/installation/Logout-Single-Signout.html
当 CAS 会话结束时,它会通知每个服务 SSO 会话不再有效,并且依赖方需要使他们自己的会话无效。
这可以通过两种方式发生:
CAS 直接向服务发送 HTTP POST 消息(反向通道通信):这是向服务执行通知的传统方式。
CAS 使用消息和 RelayState 参数(前端通道通信)重定向 (HTTP 302) 到服务:此功能受 SAML SLO 的启发,如果客户端应用程序由多个服务器组成并使用会话亲和性,则需要此功能。CAS 客户端的预期行为是使应用程序 Web 会话无效并使用 RelayState 参数重定向回 CAS 服务器。
重要的部分:
使用警告!
此时前通道 SLO 仍处于试验阶段。
因此,您的 SSO 服务器直接向应用程序发送请求。身份验证器识别出这个请求是一个特殊的请求,并注销引用的用户。
更新:
看看以下链接:
https ://wiki.jasig.org/display/casum/single+sign+out
https://github.com/Jasig/cas/blob/6c3df3a5f42d2d8b771ba773aeda3ba5a4c525e3/cas-server-webapp/src/main/webapp/WEB-INF/spring-configuration/applicationContext.xml
https://github.com/Jasig/cas/blob/6c3df3a5f42d2d8b771ba773aeda3ba5a4c525e3/cas-server-core/src/main/java/org/jasig/cas/logout/LogoutManagerImpl.java
您是否无意中删除或覆盖了您的 applicationContext 中的 logoutManager 声明?您正在运行的 spring 上下文中是否有 logoutManager bean?
我将首先在 LogoutManagerImpl.java 的 handleLogoutForSloService、performBackChannelLogout 和 performLogout 方法中设置断点。
他们被召唤了吗?
你能穿过它们吗?
是否调用 performBackChannelLogout?
performBackChannelLogout 中的 this.httpClient.sendMessageToEndPoint(msg) 是否成功?如果您登录到 2 个服务,则应该使用两个服务 url 调用 performBackChannelLogout 两次。