【问题标题】:Multiple Spring Projects, shared authentication多个 Spring 项目,共享认证
【发布时间】:2014-05-02 02:37:36
【问题描述】:

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

但是,我的一些朋友请求访问,我愿意将其提供给他们。我打算通过使用 AngularJS 构建一个 Web 应用程序来做到这一点。此应用程序将通过调用 RESTful 端点与 Spring-MVC 项目进行通信。但是,有些人可能有权访问服务的子集。我希望人们使用这些详细信息注册和登录,或者使用 OpenID 登录。

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

是否可以创建一个额外的服务并让人们登录或注册该服务?并让其他服务使用该服务检查认证状态?

哪种 Spring-Security 安全模型更适合使用(OAuth 1.0、OAuth 2.0、基本身份验证等)?

是否有替代方法来实现我的要求?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      您必须检查 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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          • Apache HTTP 服务器
          • Drupal
          • IIS
          • Java
          • PAM
          • PHP
          • Perl
          • PL/SQL
          • 红宝石
          • .NET

          【讨论】:

            猜你喜欢
            • 2017-06-15
            • 2018-07-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-15
            • 1970-01-01
            相关资源
            最近更新 更多