2016-12-30 100 views
0

我已将WSO2 Identity Server配置为IDP,并将两个应用程序配置为SP。所有的工作很好,除了几件事情:Spring SAML SSO不共享会话

  • ,当我从一个应用程序注销,另一个应用程序没有看到,我被注销

  • ,当我登录到一个应用,其他应用程序不要我没有看到,我登录

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

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

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

我能做什么错?如何从另一个应用程序中检索该用户注销/登录?

编辑:

例如,WSO2 API管理器存储有这样的机制:

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

UPDATE:

org.springframework.security.saml.websso.SingleLogoutProfileImpl类中发现的问题。当注销请求来自WSO2 IS时,比对象AuthenticationSAMLCredential是空值,并且出现错误No user is logged in,但是真正的用户仍然在Spring SAML应用程序中登录。

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

回答

1

你必须同时验证应用程序是否在呼唤身份服务器(IS)使用相同的主机名。例如。 https://is.blahblah.com/samlsso

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

+0

相同的域名:https:// localhost:9444/samlsso –