Spring SAML SSO不共享会话

时间:2016-12-30 10:47:06

标签: spring spring-security wso2 wso2is spring-saml

我已将WSO2 Identity Server配置为IDP,并将两个应用程序配置为SP。一切正常,除了少数事情:

  • 当我从一个应用程序注销时,另一个应用程序看不到我已注销

  • 当我登录一个应用程序时,另一个应用程序看不到我已登录

恕我直言,有SSO和SLO的主要原则。

当我检查SecurityContextHolder.getContext().getAuthentication()后,在注销或在另一个应用程序中登录后没有任何变化。

也许我应该在每个加载网址之前调用WSO2页面/ samlsso?

我该怎么办?如何从另一个应用程序中检索该用户注销/登录?

编辑:

例如,WSO2 API Manager Store有这样的机制:

  • 当我从我的应用程序注销并重新加载商店页面时,然后重定向到商店中未登录的主页面。与登录相同。

更新:

我在班级org.springframework.security.saml.websso.SingleLogoutProfileImpl中发现了问题。当注销请求来自WSO2 IS时,对象AuthenticationSAMLCredential为空,并且发生错误No user is logged in,但对于仍在Spring SAML应用程序中登录的真实用户。

同样的讨论是here,但没有效果:\

2 个答案:

答案 0 :(得分:1)

您必须验证这两个应用是否使用相同的主机名呼叫Identity Server(IS)。例如。 https://is.blahblah.com/samlsso

IS会话基于cookie('commonAuthId'和'samlssoTokenId'cookie是特定的)。如果应用程序使用两个不同的主机名称呼叫IS,则会在IS端创建两个不同的会话。要使SSO和SLO发生,两个应用程序必须共享一个IS会话。

答案 1 :(得分:0)

我们正在使用travelocity.com和avis.com网络应用程序来测试SAML2 sso。你可以在这里找到更多细节[1]。您还可以查看此文档[2] 在Identity Server中注册两个服务提供商,然后按照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