Spring SAML SSO 不共享会话
Posted
技术标签:
【中文标题】Spring SAML SSO 不共享会话【英文标题】:Spring SAML SSO do not share session 【发布时间】:2017-05-14 16:15:36 【问题描述】:我已将 WSO2 身份服务器配置为 IDP,并将两个应用程序配置为 SP。一切正常,除了几件事:
当我从一个应用程序注销时,另一个应用程序看不到我已注销
当我登录一个应用程序时,另一个应用程序看不到我已登录
恕我直言,有 SSO 和 SLO 的主要原则。
当我检查SecurityContextHolder.getContext().getAuthentication()
时,注销或登录另一个应用程序后没有任何变化。
也许我应该在每个加载 URL 之前调用 WSO2 页面 /samlsso?
我能做错什么?如何从另一个应用程序中检索该用户已注销/登录?
编辑:
例如,WSO2 API Manager Store 有这样的机制:
当我从我的应用程序注销并重新加载商店页面时,然后重定向到商店中未登录的主页面。与登录相同。更新:
我在org.springframework.security.saml.websso.SingleLogoutProfileImpl
课堂上发现了问题。当注销请求来自 WSO2 IS 时,对象 Authentication
和 SAMLCredential
为空,并发生错误 No user is logged in
,但真实用户仍登录 Spring SAML 应用程序。
同样的讨论是here,但没有效果:\
【问题讨论】:
【参考方案1】:您必须验证两个应用程序是否使用相同的主机名调用 Identity Server (IS)。例如。 https://is.blahblah.com/samlsso。
IS 会话基于 cookie(具体来说是“commonAuthId”和“samlssoTokenId”cookie)。如果应用程序使用两个不同的主机名调用 IS,则会在 IS 端创建两个不同的会话。要使 SSO 和 SLO 发生,两个应用程序必须共享一个 IS 会话。
【讨论】:
【参考方案2】:我们正在使用 travelocity.com 和 avis.com 网络应用程序来测试 SAML2 sso。您可以在此处找到更多详细信息[1]。此外,您可以查看此文档[2] 在身份服务器中注册两个服务提供者并按照 1 到 8 步操作。
[1]https://docs.wso2.com/display/IS500/Configuring+Single+Sign-On+with+SAML+2.0
[2]https://docs.wso2.com/display/IS500/Customizing+Login+Pages
【讨论】:
以上是关于Spring SAML SSO 不共享会话的主要内容,如果未能解决你的问题,请参考以下文章
带有 Spring 会话的 Spring Security SAML
使用带有 Spring Security 的 SAML 进行单点登录 (SSO)
OpenID Connect 最终会取代 SAML 成为 SSO 的主导协议吗?