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

时间:2013-02-19 04:46:44

标签: java spring tomcat7 single-sign-on

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

我可以分别使用https://localhost/oldApphttps:localhost/newApp来访问这些应用。

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

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

提前致谢。

4 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:7)

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

  1. Oauth 2 - http://oauth.net/2/
  2. SAML 2 - https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security
  3. SAML 2.0有很多身份/服务提供者角色的实现。

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

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

答案 2 :(得分:3)

您可以在tomcat中部署CAS服务器(这只是一场战争)并相应地配置您的Web应用程序的过滤器。您可以从link获得帮助。

答案 3 :(得分:3)

我使用Tomcat的 SSO Valve

进行了管理
  1. 将SSO Valve放在server.xml文件的主机(localhost)元素中:

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> </Host>

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

    <user username="user1" password="user1" roles="employee"/>

  3. 在您的应用web-app文件的web.xml元素中,添加安全限制:

    <security-constraint> <web-resource-collection> <web-resource-name>App name</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>employee</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <realm-name>file</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>employee</role-name> </security-role>

  4. 就是这样。现在,登录到您的某个应用,您应该登录其他应用。

  5. 当然,您不应该在制作中使用纯文本密码,这只是一个简单的例子。你应该考虑Digest authentication以及configuring SSL on Tomcat

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

    P.S。如果您将用户存储在 SQL数据库中,请在此答案下方查看我的评论。