多个Spring项目,共享身份验证

时间:2014-03-24 16:01:36

标签: java spring java-ee spring-mvc spring-security

我在家中的Wildfly服务器上部署了10个Spring-MVC项目。这些项目已经运行了很长一段时间,而且一直是私有的。

然而,我的一些朋友要求访问,我愿意给他们。我计划通过使用AngularJS构建Web应用程序来实现这一目标。该应用程序将通过调用RESTful端点与Spring-MVC项目进行通信。但是,有些人可能会访问一部分服务。我希望人们注册并使用这些详细信息登录或使用OpenID登录。

这导致必须为这些项目添加身份验证和授权。可以使用Spring Security完成。但是,我不想在每个服务中实现这个逻辑。

是否可以创建额外服务并让人们登录或注册此服务?让其他服务使用此服务检查身份验证状态吗?

哪种Spring-Security安全模型可以智能使用(OAuth 1.0,OAuth 2.0,基本身份验证等)?

是否有其他方法可以实现我的要求?

4 个答案:

答案 0 :(得分:4)

通常的解决方案是将所有服务器置于通用身份验证代理之后,这为用户提供了一个通用的登录页面。身份验证代理通过将用户名和密码与LDAP或数据库表中注册的值或OpenId进行比较来检查用户的身份。

如果身份验证成功,代理将开始将用户请求重定向到用户通过身份验证的服务器。

从代理转发到终端服务器的每个请求都带有一个预身份验证标头,其中包含向应用程序证明重定向请求确实来自代理的凭据,并且它不是伪造的请求。

每个Spring应用程序都设置为不提供登录页面,而是检查预身份验证标头。这是设置Pre-Authentication的Spring文档。

查看与Siteminder身份验证代理集成的此example

此解决方案的核心是用户不直接向终端服务器发出请求,所有这些都通过您需要支持OpenId的代理。

答案 1 :(得分:1)

您必须检查OAuth 2.0,它可以帮助您管理REST服务的身份验证和授权。检查下面的演示文稿和代码:

https://docs.google.com/presentation/d/1wiOJTMnGWL51P6NyFTCbpJz7-TsrYYrTd6_Siv_9Sfo/edit?usp=sharing

https://github.com/bassemZohdy/Spring_REST_OAuth_Demo

答案 2 :(得分:0)

由于所有应用程序都在同一台服务器上运行,因此您可以使用基于常规服务器的Java EE安全性与Spring安全性进行一些协调。

答案 3 :(得分:0)

CAS身份验证似乎是一个有效的选择,Spring officially支持一个示例。 CAS声称“CAS支持CAS1,CAS2和SAML协议,允许简单的单点登录以及n层委托身份验证。”另一个优点是CAS支持的平台不同,以防您构建除Java Spring之外的其他应用程序:

  • Apache HTTP Server
  • Drupal
  • IIS
  • Java
  • PAM
  • PHP
  • 的Perl
  • PL / SQL
  • 红宝石
  • .NET