0

我正在开发一个使用 phpCAS 链接到 CAS 服务器的 webapp。到目前为止一切顺利,我能够在 CAS 身份验证后访问我的应用程序。我现在应该实现一个注销功能:当有人注销 CAS 服务器时,它会向为该会话打开的所有应用程序发送注销请求。

问题是我的应用似乎没有收到该请求。我联系了管理员,管理员告诉我他可以看到离开服务器的请求。然后他让我向他确认我的服务器收到了该请求。

这就是问题所在:我不知道如何查看服务器是否收到了注销请求(一个 json 文件......显然 POST 方法用于将数据发送到我的应用程序的地址......如你所见,我不知道我在说什么。)。我已经搜索了好几天了,我完全处于黑暗中。我尝试使用 tcpdump。当我注销 CAS 服务器时,我看到一个 TCP F 标志,所以它首先看起来像是一件好事。但我不知道如何查看我的服务器是否收到了注销请求。

希望有人可以帮助我...

提前谢谢你。

4

1 回答 1

1

这就是问题所在:我不知道如何查看服务器是否收到了注销请求

您需要设计某种位于应用程序前面并拦截所有请求的过滤器/拦截器。此过滤器应检查请求正文以查看请求是否确实是注销请求。如果是,则解析并使用请求正文并相应地开始注销并删除应用程序会话。

...通过一些搜索和努力,看起来 phpCAS 可以自己处理注销请求: https ://github.com/apereo/phpCAS/blob/master/docs/examples/example_logout.php

显然 POST 方法用于将数据发送到我的应用程序的地址

不是“显然”;确切地说。_ 根据文档:

CAS 服务器可以支持单点注销 (SLO)。SLO 意味着用户不仅从 CAS 服务器注销,而且还从所有访问的 CAS 客户端应用程序注销。如果 CAS 服务器支持 SLO,则 CAS 服务器必须向在此 CAS 会话期间提供给 CAS 的所有服务 URL 发送一个包含注销 XML 文档(见附录 C)的 HTTP POST 请求,只要用户明确地过期了 Ticket Granting Ticket (例如在注销期间)。不支持 SLO POST 请求的 CAS 客户端必须忽略这些请求。SLO 请求也可以在 TGT 空闲超时时由 CAS 服务器发起。

然后这里是实际的有效载荷

于 2021-03-22T20:00:57.083 回答