SAML 重新验证用户会话

Posted

技术标签:

【中文标题】SAML 重新验证用户会话【英文标题】:SAML revalidate user session 【发布时间】:2016-06-14 13:04:10 【问题描述】:

我们正在使用 spring-security 和 PingOne 作为 IdP 来实施 SAML。 我们有一个问题,当用户使用 SSO 登录应用程序,然后在 IdP 上被禁用/删除时,他的会话不会终止,因此他可以继续使用该应用程序。 我已经覆盖了 SAMLAuthenticationProvider 身份验证方法,因此我在 ExpiringUsernameAuthenticationToken 上设置了到期日期(类似于 IdP 在断言中为我们提供 SessionNotOnOrAfter 值),但问题是用户只是从应用程序中注销,而不是重新进行身份验证。

有什么方法可以检查用户在 IdP 端是否仍然有活动会话,并且只有在他的 IdP 会话无效时才将他注销?

【问题讨论】:

SAML2 包含一个单一的注销机制,可用于协调 IDP 和 SP 上的会话生命周期,但我不知道 PingOne 或 spring-security 是否支持它。 @AndersAbel 据我了解,单点注销从 SP 端工作,当用户启动 SL 时,它会将您从 IdP 和 SP 中注销。 可以从 SP 和 IDP 发起单次注销。 谢谢,但我不确定如何从 IdP 端启动单点注销,显然当用户被禁用时它不会启动。 【参考方案1】:

对于这种情况,SAML 提供了 AuthnRequest 的“IsPassive”属性。如果设置为“true”,则可用于检查用户是否仍与 IdP 有有效会话。那些“被动”的 AuthnRequest 可以定期触发(例如应用程序端会话超时)。

【讨论】:

如果 Spring Security SAML 扩展能够提供这个 OOTB,那就太棒了。我认为目前情况并非如此。

以上是关于SAML 重新验证用户会话的主要内容,如果未能解决你的问题,请参考以下文章

要求使用相同的 IDP 重新进行身份验证 - Spring SAML

SAML 身份验证的用户不会出现在 Spring Security 的 SessionRegistry 中

Spring session 与 spring security saml 的集成

使用 Spring Security saml 的 IDP 会话超时

Spring Security SAML 中的刷新会话

从会话外部更新在线用户数据(无需重新验证)