如何检查 IDP 是不是仍然存在有效会话?
Posted
技术标签:
【中文标题】如何检查 IDP 是不是仍然存在有效会话?【英文标题】:How to Check whether a valid session is still existing at IDP?如何检查 IDP 是否仍然存在有效会话? 【发布时间】:2014-05-02 22:30:09 【问题描述】:我已经使用 Spring Security SAML 实现了 SSO。以下是目前对我有用的:
当我尝试访问 SP 的任何资源时,如果我尚未登录,我将被重定向到我的 IdP(在我的情况下为 idp.ssocircle.com)。在 IDP 成功验证后,我被重定向回 SP 并授权传入的 SAML 响应并为相应用户创建会话。直到这里一切都很酷! 但是,当我从 IDP 注销(通过从外部单击 idp.ssocircle.com 注销)时,我应该无法访问我的 SP,这在我的情况下没有发生。 现在我想做的是编写一个新的过滤器,在处理 SP 上的任何请求之前检查 IDP 的有效会话。我搜索了很多,但找不到任何解决我的问题的方法。
请提供有关如何实现此过滤器的意见,或者有没有其他方法可以做到这一点?任何建议表示赞赏。
【问题讨论】:
【参考方案1】:您的 IDP 是否支持并正确初始化单点注销?如果是这样,它可能与this issue 有关,只需更新到最新的 Spring SAML 版本或将注销处理程序中的属性 invalidateHttpSession 更改为 true:
<bean id="logoutSessionHandler"
class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler">
<property name="invalidateHttpSession" value="true"/>
</bean>
【讨论】:
我想知道的是如果一个会话已经在 SP SP?在当前情况下,我仍然可以在没有任何 IDP 会话的情况下访问该用户的 SP。我已经尝试将上述属性设置为 true,但它的行为仍然相同,或者可能是它应该的行为方式! 从 IDP 注销后,有两种选择:IDP 或者启动单次注销进程(= 它尝试终止所有连接的 SP 中的会话),或者它只是终止本地 IDP 会话并且不传播注销到其他地方。在 SSOCircle 的情况下 - 它不会执行单次注销,因此一旦您从 SSO Circle 注销,您的 SP 会话应该仍然处于活动状态。 我不知道。感谢您的回复。 Valdi... 我正在尝试实现相同的目标,因此我将 spring-security-saml2-core 更新为 RC3。然后我开始遇到像 SecurityContextHolder.getContext().getAuthentication().getPrincipal() 正在返回 userName 而不是 UsernamePasswordAuthenticationToken 对象的问题。所以一切都开始失败了。知道如何获取 UserInfo 对象而不是 UserName。以上是关于如何检查 IDP 是不是仍然存在有效会话?的主要内容,如果未能解决你的问题,请参考以下文章