1

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

4

2 回答 2

3

在 Spring-SAML 中,单点注销当前支持 HTTP-Redirect 和 HTTP-POST 绑定。SOAP 绑定不可用。参考:Spring SAML 全局注销

spring-saml 不支持反向通道

于 2016-05-11T10:41:19.057 回答
1

,不可能<LogoutRequest>使用 Spring-SAML 库通过反向通道通过 HTTP-POST 执行。

此行为违反 SAML 规范,根据 Vladimir Schäfer 在SES-162 票证中的评论, Spring-SAML 将不支持此行为。

SOAP 绑定适用于后端通道,但正如@meetarun 所指出的,它目前尚未在 Spring-SAML 库中实现。

于 2017-09-08T10:30:57.840 回答