我目前正在尝试跨多个基于 JVM(Grails、Servlets)的 Web 应用程序实现单点登录解决方案,这些应用程序当前都部署在同一个 servlet 容器中(目前是 Tomcat,但不想将我的解决方案仅限于 Tomcat)。所有 Web 应用程序共享一个公共数据库。
我查看了各种选项,从使用 CAS 或其他第三方库到创建新的 Web 服务来处理单点登录,但似乎没有一个能真正满足业务需求。我当前的实现涉及创建一个新的 jar 库,该库具有AuthenticationProviders的通用实现和基于 Spring Security 的Pre-Authentication Filters 。
在这种方法中,我有多个 AuthenticationProviders(当前是 Active Directory 和数据库)供应用程序进行身份验证。成功验证后,将在包含用户、到期时间和令牌的会话表中插入一行。该令牌还将作为 cookie 存储在用户的机器上,用于验证他们在预身份验证过滤器中是否有当前会话。
在我想确保我没有造成巨大的安全问题之前从未这样做过,而且我还想知道创建令牌需要什么?此时一个简单的 GUID 似乎就足够了?
目前我们正在开发 Spring Security 3.0.x,还没有升级到 3.1。
提前致谢。