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

问题描述 投票:18回答:4

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

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

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

我想知道如何实现SSO来做到这一点。我最好不要运行任何外部服务来处理这个问题。

提前致谢。

java spring tomcat7 single-sign-on
4个回答
7
投票

您可以通过多种方式实施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实现列表,我可以指向您的stackoverflow帖子:https://stackoverflow.com/a/761774/126414

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


11
投票

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

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

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

3
投票

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


3
投票

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

  1. 将SSO Valve放在server.xml文件的Host(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. 而已。现在,登录您的某个应用,您应该登录到其他应用。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.