我是使用CAS的初学者,我在我的一个项目中使用它来使用其单点登录服务。直到现在我已经实现了单点登录,我有一个JAVA客户端和一个PHP客户端。但是,为了使用单点注销功能,我根据CAS documentation配置了我的运行CAS。我已经完成了工作CAS的deployerConfigContext.xml中的所有更改。我的CAS正在运行,但在注销时它没有显示任何SAML注销请求。我正在使用由我制作的官方PHP客户端和Java客户端。我想这可能是由于这些线路我无法在客户端进行配置。
通过logoutType属性在服务级别配置通知的方式(后台或前台通道)。默认情况下,此值设置为LogoutType.BACK_CHANNEL。
我无法通过这一行了解实际上我必须将Logouttype设置为BACK_CHANNEL,如果是我的客户端,那么为什么默认情况下将其设置为BACK_CHANNEL,因为任何人都可以创建客户端。 / p>
非常感谢任何帮助。 在此先感谢。
答案 0 :(得分: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
您是否在applicationContext中意外删除或覆盖了logoutManager声明?在运行的spring上下文中是否有一个logoutManager bean?
我首先在handleLogoutForSloService,performBackChannelLogout和performLogout方法中设置LogoutManagerImpl.java的断点。
他们被叫了吗?
你能跨过吗?
是否调用了performBackChannelLogout?
performBackChannelLogout中的this.httpClient.sendMessageToEndPoint(msg)是否成功? 如果您登录到2个服务,则应使用两个服务URL调用performBackChannelLogout两次。