为跨域应用程序实施CAS单一注销

时间:2015-07-07 12:29:21

标签: single-sign-on logout cas jasig

我是使用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进行跟踪时)。所以任何人都可以帮我执行单点注销。

提前致谢。

1 个答案:

答案 0 :(得分:1)

CAS documentation上找到:

  

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

     

这可以通过两种方式实现:

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

    使用警告!

         

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

(我强调)

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

SLO比SSO更复杂......