2

我是使用 CAS 的初学者,我在我的一个项目中使用它来使用它的单点登录服务。到目前为止,我已经实现了单点登录,我有一个 JAVA 客户端和一个 PHP 客户端。但是为了使用单点注销功能,我根据CAS 文档配置了正在运行的 CAS 。我已经完成了我工作 CAS 的 deployerConfigContext.xml 中的所有更改。我的 CAS 正在运行,但在注销时未显示任何 SAML 注销请求。我正在使用我制作的官方 PHP 客户端和 Java 客户端。我认为这可能是由于这些行我无法在我的客户端配置它。

通过 logoutType 属性在服务级别配置通知的完成方式(后向或前向通道)。该值默认设置为 LogoutType.BACK_CHANNEL。

我无法通过这一行理解实际上我必须将 Logouttype 设置为 BACK_CHANNEL,如果它是我的客户端,那么为什么它默认设置为 BACK_CHANNEL,因为任何人都可以创建客户端。

非常感谢任何帮助。提前致谢。

4

1 回答 1

1

看看 jasig 文档:http: //jasig.github.io/cas/development/installation/Logout-Single-Signout.html

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

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

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

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

重要的部分:

使用警告!

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

因此,您的 SSO 服务器直接向应用程序发送请求。身份验证器识别出这个请求是一个特殊的请求,并注销引用的用户。

更新:

看看以下链接: https ://wiki.jasig.org/display/casum/single+sign+out

https://github.com/Jasig/cas/blob/6c3df3a5f42d2d8b771ba773aeda3ba5a4c525e3/cas-server-webapp/src/main/webapp/WEB-INF/spring-configuration/applicationContext.xml

https://github.com/Jasig/cas/blob/6c3df3a5f42d2d8b771ba773aeda3ba5a4c525e3/cas-server-core/src/main/java/org/jasig/cas/logout/LogoutManagerImpl.java

您是否无意中删除或覆盖了您的 applicationContext 中的 logoutManager 声明?您正在运行的 spring 上下文中是否有 logoutManager bean?

我将首先在 LogoutManagerImpl.java 的 handleLogoutForSloService、performBackChannelLogout 和 performLogout 方法中设置断点。

他们被召唤了吗?

你能穿过它们吗?

是否调用 performBackChannelLogout?

performBackChannelLogout 中的 this.httpClient.sendMessageToEndPoint(msg) 是否成功?如果您登录到 2 个服务,则应该使用两个服务 url 调用 performBackChannelLogout 两次。

于 2015-07-09T12:09:26.330 回答