如何在现有的tomcat Web应用程序上实现SSO

我有一个tomcat 7设置,其上部署了oldApp.war和newApp.war。 这两个应用程序共享数据库中用户的相同登录凭据。

我可以分别使用https://localhost/oldApphttps:localhost/newApp访问应用程序。

我的oldApp是一个Spring MVC java应用程序,当用户登录到oldApp时,我希望有一个链接,将用户带入newApp而不需要登录凭据。

我想知道如何实现SSO来执行此操作。 我最好不要运行任何外部服务来处理这个问题。

提前致谢。

您可以通过多种方式实施SSO:

  1. Oauth 2 – http://oauth.net/2/
  2. SAML 2 – https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security

SAML 2.0具有许多身份/服务提供者角色的实现。

对于IDP实现列表,我可以指向您的stackoverflowpost: https : //stackoverflow.com/a/761774/126414

如果您计划实施服务提供商,那么有一个很好的Spring扩展: http : //static.springsource.org/spring-security/site/extensions/saml/index.html

更新:2018年及以下信息已过期。 如果您正在启动新应用程序,则使用联合身份协议(如Open ID Connect),您将免费获得SSO。

您可以采取以下几种方法:

  1. 您可以使用Tomcat进行身份validation并使用Tomcat的单点登录function。 如果您当前正在使用Spring对用户进行身份validation,则可能需要更改一些内容。 此外,根据您进行身份validation的方式,Tomcat的身份validation可能无法配置。
  2. 您可以设置第三个CAS ,servlet(或类似的东西),两个Web应用程序都进行身份validation。
  3. 您可以使用Spring和预先认证的filter自行设置 。 您基本上必须编写自己的预先validationfilter,该filter在回退到旧的身份validation方法之前检查两个servlet都可以访问(数据库?,共享上下文?)现有凭据的位置。 您需要确保在某个filter中清除此身份validation,以便下一个请求不会自动inheritance先前的请求凭据。

您可以在tomcat中部署CAS服务器(这只是一场战争),并相应地配置您的Web应用程序的filter。 您可以从此链接获取帮助。

我用Tomcat的SSO Valve管理了这个:

  1. 将SSO Valve放在server.xml文件的Host(localhost)元素中:

  2. 添加用户和角色(例如,在tomcat_users.xml ):

  3. 在apps web.xml文件的web-app元素中,添加安全性约束:

    App name /* employee FORM file /login.jsp /error.jsp employee

  4. 而已。 现在,登录到您的某个应用,您应该登录到其他应用。

当然,你不应该在生产中使用平面文本密码,这只是一个简单的例子。 您应该考虑摘要式身份validation,以及在Tomcat上配置SSL。

我希望这会对某人有所帮助!