通过后台频道

时间:2016-01-13 16:48:39

标签: spring-security spring-saml keycloak

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中的评论,它似乎是一种预期的图书馆行为。

2 个答案:

答案 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库中实现。