【问题标题】:Implement CAS Single Sign Out for Cross Domain Applications为跨域应用程序实施 CAS 单点注销
【发布时间】:2015-09-24 22:35:20
【问题描述】:

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

我在 JAVA Client

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

所以经过大量研究后,我遇到了this,我成功地实现了退出功能。但我不想使用通用会话数据库。

在官方documentation of CAS中提到:

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

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

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

提前致谢。

【问题讨论】:

    标签: single-sign-on logout cas jasig


    【解决方案1】:

    如在CAS documentation 上找到的:

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

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

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

    使用警告!

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

    (重点由我添加)

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

    SLO 比 SSO 复杂得多...

    【讨论】:

    • 处理注销请求时,$_POST['logoutRequest'] 为空。因此,我无法为我的任何一个客户接收 SLO 消息。那么我应该如何为 JAVA 和 PHP 客户端检索此 SLO 消息
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 2013-07-24
    • 2010-11-21
    • 1970-01-01
    • 2011-09-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多