在多节点设置中使用Spring Security + CAS SSO进行并发会话控制?

时间:2016-11-22 00:16:09

标签: spring session spring-security cas

以下是我的应用程序的部署配置。没有为webapp1& amp;配置群集。 webapp2,既不适用于CAS1& CAS2。我完全依赖会话粘性来确保来自最终用户的流量始终由同一服务器提供服务,但是我确实在CAS1和CAS2之间配置票证复制以保证SSO正常工作:

VIP1 +-- webapp1 --+ VIP2 +- CAS1  
     |             |      |
     +-- webapp2 --+      +- CAS2

我看到很多文章/博客描述了如何使用spring security实现并发会话控制,以下是我想到的问题。

1)我想通过spring security和CAS SSO来验证我对并发会话控制的理解,所以让我们假设我们没有webapp2和CAS2。根据我的理解,必须承认webapp的spring security和CAS,以便用户成功登录webapp。通过在其安全上下文中添加身份验证来确认Webapp的弹簧安全性,而通过添加TGC cookie来确认CAS。 如果我将并发会话控制(使前一个会话控制无效)同时应用于webapp和CAS,并且当UserA和UserB使用相同的登录时,则应发生以下情况:
1.1)UserA已成功通过身份验证,因此他从CAS收到一个cookie,并在webapp的弹簧安全上下文中进行身份验证。
1.2)由于UserB使用相同的登录,因此第二次登录验证时,CAS将使UserA无效。
1.2)当webapp的弹簧安全性被确认登录被认证并且发现这是第二次同一登录被认证时,因此webapp的弹簧安全性使UserA无效。 1.3)当UserA尝试访问webapp时,webapp的spring security将UserA重定向到CAS 1.4)CAS确定UserA带来的cookie无效,因此要求UserA再次输入登录凭证。

这是正确的吗?

2)说我的理解是正确的,让我们在没有聚类的情况下放回webapp2和CAS2,正如我在开头提到的那样。如果UserA由webapp1和CAS1提供服务而UserB由webapp2和CAS2提供服务,我认为并发会话控制在这种情况下不起作用,我需要实现自定义SessionRegistryImpl,ConcurrentSessionControlStrategy和ConcurrentSessionFilter,对吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

我只使用了预身份验证CAS,其中CAS添加了带有身份验证信息的标头,然后您可以针对CAS / LDAP进行解析。

您的分析看起来是正确的,通过查看javaDoc和源代码,您几乎就在那里。

  • 您需要一个自定义 SessionRegistry ,这样您就拥有了一个全局位置来跟踪会话(Hazelcast或数据库)。
  • 您需要 ConcurrentSessionControlStrategy ,它将检查是否达到了并发会话的限制。
  • 您将需要 ConcurrentSessionFilter ,因此具有已过期会话的用户将被注销。

此外,您需要在 AbstractAuthenticationProcessingFilter 上设置 RegisterSessionAuthenticationStrategy ,因为默认为 NullAuthenticatedSessionStrategy ,这意味着当调用SessionRegistry时不会调用SessionRegistry会话已创建。