我是使用CAS的初学者。我的CAS服务器已启动并在端口8443(安全HTTP层)上运行。我还制作了两个应用程序--JAVA Client(我自己的JAVA Client)和PHP Client(由CAS正式提供)来测试我的CAS服务器。我可以为两个客户端使用单点登录。我还在CAS属性文件中启用了Single Sign Out。我当前的CAS版本是 4.0.0 ,我使用的是Apache Tomcat版本 8.0.23
我在web.xml中为 JAVA客户端
添加了以下依赖关系 <filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class> org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class> org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
但是在执行单点注销时,当我退出PHP应用程序时,我无法注销已经打开的JAVA应用程序。这意味着从PHP应用程序注销时不会破坏我现有的JAVA应用程序会话。
经过大量研究后,我遇到了this,我成功地实现了注销功能。但我不想使用通用会话数据库。
在官方documentation of CAS中提到:
CAS直接向服务发送 HTTP POST 消息(反向信道通信):这是向服务执行通知的传统方式。
当为SLO配置CAS时,它会尝试向SSO会话期间请求对CAS进行身份验证的每个应用程序发送注销消息。
但我无法理解如何获取 SLO 消息,因为在注销应用程序期间我没有收到任何POST请求(使用firebug进行跟踪时)。所以任何人都可以帮我执行单点注销。
提前致谢。
答案 0 :(得分:1)
在CAS documentation上找到:
当CAS会话结束时,它会通知每个服务SSO会话不再有效,并且依赖方需要使自己的会话无效。
这可以通过两种方式实现:
- CAS直接向服务发送HTTP POST消息(反向信道通信):这是向服务执行通知的传统方式。
- CAS使用消息和RelayState参数(前端通道通信)将服务重定向(HTTP 302)到服务:此功能受SAML SLO的启发,如果客户端应用程序由多个服务器组成并使用会话关联,则需要此功能。 CAS客户端的预期行为是使应用程序Web会话无效,并使用RelayState参数重定向回CAS服务器。
醇>使用警告!
此时的前置通道SLO仍处于试验阶段。
(我强调)
如果您在浏览器上没有看到相应的活动,则可能使用选项#1,其中POST消息在后端发送。
SLO比SSO更复杂......