<LogoutRequest>
Keycloak、WSO2 和其他一些 SSO IDP 服务器提供了“单次注销”的可能性,而无需通过反向通道发送 over HTTP-POST 来强制浏览器重定向到当前用户登录的每个 SP 。
不幸的是,如果服务中的 SSO 集成是使用spring-security-saml2-core库(我们使用 Keyclock)实现的,这将不起作用。
我可以从 SP 端的日志文件中弄清楚的是:
[2016-01-13 12:50:56.867] [DEBUG] [org.springframework.security.saml.SAMLLogoutProcessingFilter] - Received logout request is invalid, responding with error
org.springframework.security.saml.SAMLStatusException: No user is logged in
at org.springframework.security.saml.websso.SingleLogoutProfileImpl.processLogoutRequest(SingleLogoutProfileImpl.java:168)
at org.springframework.security.saml.SAMLLogoutProcessingFilter.processLogout(SAMLLogoutProcessingFilter.java:176)
at org.springframework.security.saml.SAMLLogoutProcessingFilter.doFilter(SAMLLogoutProcessingFilter.java:102)
...
使用Spring SAML扩展的应用部署在Tomcat 7上。<LogoutRequest>
通过后端通道发送时似乎没有浏览器会话cookie,并且无法识别用户应用程序会话,因此无法注销用户和应用程序会话用户不会失效。
但是,它<LogoutRequest>
包含可以唯一标识应用程序会话的全局 SSO 会话标识符。但这不会发生。
Spring SAML 库的这种行为是否是设计意图:在单次注销期间不支持后端通信?还是我遗漏了什么并且可以配置所需的行为?
注意:我知道根据 SAML 规范 HTTP-POST 和 HTTP-Redirect 绑定旨在通过用户代理(Web 浏览器)进行,但是 SSO IDP 服务器的广泛支持让我问了这个问题 :)
先感谢您!
更新:根据 Vladimir Schäfer 在SES-162 票证中的评论,这似乎是一种预期的图书馆行为。