我有两个Java wepapps可能在使用Spring Security进行身份验证的不同域/服务器上。首先是处理将用户本地存储在应用程序数据库中的身份验证。对于第二个应用程序,我想使用与第一个单点登录的第一个Webapp相同的用户帐户对用户进行身份验证(如果在第一个Webapp中对用户进行了身份验证,则不必在第二个Webapp中再次输入其信息)。

我确定了执行此操作的三种可能方法,但这似乎并不简单:


共享的cookie:为两个应用程序使用共享的会话cookie和相同的数据库。这似乎相对容易实现,但是两个Web应用程序必须位于同一域中,而我的应用程序不一定是这样。
目录服务:使用中央目录服务(LDAP),两个Web应用程序将使用该目录服务来处理身份验证。实施起来似乎很繁琐,而且用户无法再存储在第一个Webapp数据库中。现有的用户帐户将需要迁移到LDAP中,并且将无法使用第一个Web应用程序创建新用户。
OAuth:通过提供OAuth api(例如Google登录类型的服务),似乎有可能使第一个webapp处理外部身份验证请求。这样一来,第二个Web应用程序就可以使用此api来对用户进行身份验证,但是我不确定登录过程是否完全透明以处理单点登录。似乎也不容易实现,因为这将需要在第一个Web应用程序中开发完整的OAuth api。


我还查看了该服务https://auth0.com,该服务似乎提供了可以与外部数据库接口的身份验证api,但是我不确定它可以与Spring Security进行接口,并且还要求使用在线解决方案,不理想。我不确定它是否可以处理共享帐户上的单一登录。

还有其他其他方法可以更直接地处理此用例吗?

最佳答案

作为您的需求的SSO系统,CAS确实是一个不错的选择,并且它有多个用于Spring Security的CAS客户端。您可以在云中的CAS上免费尝试CAS服务器v4.0:http://www.casinthecloud.com ...

09-05 01:27