我在家中的Wildfly服务器上部署了10个Spring-MVC项目。这些项目已经运行了很长一段时间,而且一直是私有的。
然而,我的一些朋友要求访问,我愿意给他们。我计划通过使用AngularJS构建Web应用程序来实现这一目标。该应用程序将通过调用RESTful端点与Spring-MVC项目进行通信。但是,有些人可能会访问一部分服务。我希望人们注册并使用这些详细信息登录或使用OpenID登录。
这导致必须为这些项目添加身份验证和授权。可以使用Spring Security完成。但是,我不想在每个服务中实现这个逻辑。
是否可以创建额外服务并让人们登录或注册此服务?让其他服务使用此服务检查身份验证状态吗?
哪种Spring-Security安全模型可以智能使用(OAuth 1.0,OAuth 2.0,基本身份验证等)?
是否有其他方法可以实现我的要求?
答案 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
答案 2 :(得分:0)
由于所有应用程序都在同一台服务器上运行,因此您可以使用基于常规服务器的Java EE安全性与Spring安全性进行一些协调。
答案 3 :(得分:0)
CAS身份验证似乎是一个有效的选择,Spring officially支持一个示例。 CAS声称“CAS支持CAS1,CAS2和SAML协议,允许简单的单点登录以及n层委托身份验证。”另一个优点是CAS支持的平台不同,以防您构建除Java Spring之外的其他应用程序: