2

我是使用 CAS 的初学者。我的 CAS 服务器已启动并在端口 8443(安全 HTTP 层)上运行。我还制作了两个应用程序——JAVA 客户端(我自己的 JAVA 客户端)和 PHP 客户端(CAS 官方提供),用于测试我的 CAS 服务器。我可以为两个客户端使用单点登录。我还在 CAS 属性文件中启用了单点注销。我当前的 CAS 版本是4.0.0,我使用的是 Apache Tomcat 版本8.0.23

我为JAVA 客户端的 web.xml 中的 Sign Out 添加了以下依赖项

 <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 应用程序会话。

因此,经过大量研究后,我发现了这一点,并且成功实现了注销功能。但我不想使用通用的会话数据库。

在CAS的官方文档中提到:

CAS 直接向服务发送HTTP POST消息(反向通道通信):这是向服务执行通知的传统方式。

为 SLO 配置 CAS 时,它会尝试向在 SSO 会话期间向 CAS 请求身份验证的每个应用程序发送注销消息。

但我无法理解如何获取SLO消息,因为在注销应用程序期间我没有收到任何 POST 请求(同时使用 firebug 进行跟踪)。所以任何人都可以帮我执行单点注销。

提前致谢。

4

1 回答 1

2

正如在CAS 文档中找到的:

当 CAS 会话结束时,它会通知每个服务 SSO 会话不再有效,并且依赖方需要使他们自己的会话无效。

这可以通过两种方式发生:

  1. CAS 直接向服务发送 HTTP POST 消息(反向通道通信):这是向服务执行通知的传统方式。
  2. CAS 使用消息和 RelayState 参数(前端通道通信)重定向 (HTTP 302) 到服务:此功能受 SAML SLO 的启发,如果客户端应用程序由多个服务器组成并使用会话亲和性,则需要此功能。CAS 客户端的预期行为是使应用程序 Web 会话无效并使用 RelayState 参数重定向回 CAS 服务器。

使用警告!

此时前通道 SLO 仍处于试验阶段。

(重点由我添加)

如果您在浏览器上看不到相应的活动,您可能正在使用选项 #1,其中 POST 消息在后端发送。

SLO 比 SSO 复杂得多...

于 2015-07-07T14:32:57.580 回答