【发布时间】:2017-04-05 12:48:57
【问题描述】:
以下是我的应用程序的部署配置。没有为 webapp1 和 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 的 Spring Security 是通过在其安全上下文中添加身份验证来确认的,而 CAS 是通过添加 TGC cookie 来确认的。
如果我对 webapp 和 CAS 应用并发会话控制(使前一个无效),并且当 UserA 和 UserB 使用相同的登录名时,应该会发生以下情况:
1.1) UserA 已成功通过身份验证,因此他从 CAS 接收 cookie 并在 webapp 的 spring 安全上下文中留下身份验证。
1.2) 由于UserB使用的是同一个登录名,是第二次登录,CAS会使UserA失效。
1.2) 当 webapp 的 spring security 确认登录已通过身份验证并发现这是第二次相同的登录被身份验证时,webapp 的 spring security 使 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,对吗?
感谢您的宝贵时间。
【问题讨论】:
标签: spring session spring-security cas