Spring SAML - 点击 URL '/saml/logout' 后全局注销不起作用

Posted

技术标签:

【中文标题】Spring SAML - 点击 URL \'/saml/logout\' 后全局注销不起作用【英文标题】:Spring SAML - Global logout not working after hitting URL '/saml/logout'Spring SAML - 点击 URL '/saml/logout' 后全局注销不起作用 【发布时间】:2015-11-18 21:19:27 【问题描述】:

根据 Spring SAML 扩展文档:

本地注销仅终止本地会话,不会影响 IDP 上的会话,也不会影响用户使用单点登录登录的其他 SP 上的会话。本地注销可以在 scheme://server:port/contextPath/saml/logout?local=true 初始化。

对于全局注销,我们必须点击 scheme://server:port/contextPath/saml/logout URL,但对我来说,它只从本地会话中注销,但没有t 从 IDP 注销。

这是我用来创建 SAML SP 的 [WebSecurityConfig] (https://github.com/vdenotaris/spring-boot-security-saml-sample/blob/master/src/main/java/com/vdenotaris/spring/boot/security/saml/web/config/WebSecurityConfig.java)。 我的问题是,我在这里做错了吗?或者这是因为我使用的 IDP 造成的问题(不能提及 IDP,因为它是我公司的 SAML SSO 之一)。 还是我必须在这里定义任何全局注销处理程序?如果是,如何?

【问题讨论】:

我也遇到了同样的问题。你解决了这个问题吗?如果是这样,您能否将其发布为答案。 【参考方案1】:

单点登录 (SSO) 的全局注销需要服务提供商 (SP) 和身份提供商 (IdP) 的支持。您所做的只是从 SP 端启用全局注销端点,这仅确保 SP 将生成对其自身和 IdP 的全局注销请求(取决于您使用的 SAML 配置文件/绑定),现在 IdP 如何处理它也取决于 IdP。

在 SSO 中,IdP 的会话、SP 的会话和用户代理的 cookie 在登录时设置。为了促进单一的全局注销,用户期望和技术限制之间存在差距。我建议您在此处阅读有关 SLO 问题:https://wiki.shibboleth.net/confluence/display/CONCEPT/SLOIssues

Shibboleth IdPv3 使用前向通道(用户代理参与向所有 SP 和 IdP 发送注销)和反向通道(用户代理向当前 SP 和 IdP 发送注销请求, IdP 依次向所有登录的 SP 发送注销请求)。您可以在此处阅读 Shibboleth IdP v3.2.0 如何处理注销:https://wiki.shibboleth.net/confluence/display/IDP30/LogoutConfiguration

【讨论】:

【参考方案2】:

我会检查您已配置的 IdP 元数据。听起来指定的端点是错误的,所以它没有收到它需要的东西。

话虽如此,您应该确认您的 IdP 日志中是否有任何关于任何形式的注销的活动。考虑 DEBUG 或 TRACE 级别。

【讨论】:

以上是关于Spring SAML - 点击 URL '/saml/logout' 后全局注销不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring SAML:如何将请求的 URL 作为 RELAY_STATE 推送到 SAML?

如何在运行时在 spring-SAML 中添加新的 idp 元数据

Tomcat 上的 Spring Security SAML 元数据 URL

Spring SAML Okta - 如何在 IDP 启动的流程中重定向到自定义 URL

无法更改 Spring 安全 SAML SSO 中的默认“回复 URL”(断言消费者服务位置)

使用 spring-security-saml 在 RP 元数据中包含所需的声明