【发布时间】:2017-05-27 04:49:06
【问题描述】:
我的环境是 Spring4,也使用 Spring-security。
例如,有两台服务器包含相同类型的 Java 应用程序,由 Jetty 应用程序服务器提供支持。但是,他们不共享 JSESSIONID 或任何会话。
- serverA:IP 地址 192.168.1.1
- 所以,我们可以使用http://192.168.1.1/app 访问该应用程序
- serverB:IP 地址 192.168.1.2
- 所以,我们可以使用http://192.168.1.2/app 访问该应用程序
问题
如果我们在 192.168.1.3 上有一个 CAS 服务器,并且用户曾经使用 CAS 服务器登录过 serverA 应用程序,是否可以在不输入用户 ID/密码的情况下登录 serverB 应用程序?强>
能否请您简单介绍一下架构?
编辑
- 我按照文档用Spring4 + Spring-security + Spring-cas 测试了这个环境,21. CAS Authentication
- 但是,会话 cookie 提供程序是 Spring 而不是 CAS,因此会为每个服务器的 IP 地址创建会话。如果我们登录后有serverA的会话,就不可能获得serverB的会话。我未能减少登录尝试。我的意思是无论如何都需要输入 ID/Pass 才能登录 serverA 和 serverB。
- 经过很长时间,我意识到我真正的需求是可以通过一次登录尝试登录多个资源(超过服务器资源)。但是,我认为这是“单点登录”的扩展含义...
顺便
- Spring-session 项目提供了为多个资源共享会话的架构。 Spring-session 将他们的会话存储在 Redis 后端。
- 然而,使用 Spring-session 也很困难,因为它需要 a.example.com 或 b.example.com 等域 > 而不是 IP 地址。
【问题讨论】:
-
您的问题到底是什么?当两个应用程序都指向 192.168.1.3 作为 CAS 服务器时,单点登录应该可以正常工作。
-
@JohannesMüller 我认为如果我将 CAS 引入这个环境,我可以减少登录尝试。但是,事实并非如此。这就是问题。这意味着,“用户曾经使用 CAS 服务器登录 serverA 应用程序,之后当用户尝试登录 serverB 时,他/她将需要再次通过 CAS 服务器输入 id/pass(对于此环境)”
-
仍然不确定您的问题... serverA 和 serverB 不需要共享会话以使 CAS 工作。一旦您通过 CAS 登录到 serverA,这将在 CAS 服务器上创建一个会话。当 serverB 询问 CAS 是否有用户登录时,CAS 服务器不应要求身份验证,因为存在一个现有会话。
标签: java spring-security single-sign-on cas jasig