Keycloak,WSO2和其他一些SSO IDP服务器提供“单点注销”的可能性,而不强制浏览器通过反向通道发送<LogoutRequest>
通过HTTP-POST重定向到当前用户登录的每个SP。
不幸的是,如果服务中的SSO集成是使用 spring-security-saml2-core 库(我们使用Keycloack)实现的,那么这不起作用。
我可以从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服务器的广泛支持让我问这个问题:)
提前谢谢!
更新:根据弗拉基米尔·舍费尔在SES-162 ticket中的评论,它似乎是一种预期的图书馆行为。
答案 0 :(得分:2)
在Spring-SAML中,HTTP-Redirect和HTTP-POST绑定目前支持单一注销。 SOAP绑定不可用。请参阅:Spring SAML Global Logout
spring-saml
不支持后向通道答案 1 :(得分:0)
否,使用Spring-SAML库无法通过反向通道通过HTTP-POST执行<LogoutRequest>
。
这种行为违反了SAML规范,根据VladimirSchäfer在SES-162 ticket中的评论,Spring-SAML不支持它。
SOAP绑定适用于后端通道,但正如@meetarun所指出的那样,它目前尚未在Spring-SAML库中实现。