我一直在关注本教程中的示例:https://spring.io/blog/2015/01/28/the-api-gateway-pattern-angular-js-and-spring-security-part-iv
简而言之:
我有一个名为UI的服务器,它有一些html和angular js。
我有一个名为resource的服务器,它有一个RestController,它正在为数据库中的内容提供服务。所有电话都必须通过身份验证。
UI服务器有一个登录页面,它与spring http basic登录一起使用,并创建一个存储在Redis服务器中的弹簧会话,并将其共享给资源服务器。当我在内存身份验证中有一些虚拟用户时,一切正常。
问题是: 我希望我的UI服务器能够使用存在于DB中的真实用户执行登录。 UI服务器不应该有任何与DB相关的代码(不知道它的存在),但它应该在资源服务器中调用REST服务。我想的唯一方法(但对我来说听起来不对)是在UI中实现userDetailsService bean,而loadUserByUsername方法应该从资源服务器调用rest服务(例如/ getUser)。其余服务应返回所有用户详细信息,包括给定用户名的凭据和角色。但是,根据我的理解,这项服务无法保证(因为呼叫成功)会损害整个安全性。
我对所有建议和建议持开放态度。请记住,这是我第一次尝试使用Spring。
提前谢谢你,
尼古拉斯
答案 0 :(得分:0)
如果有人对我如何解决这个问题感兴趣..
我决定做谨慎的事情并研究春天的安全.. :)
我的回答是在我的 UI 服务器中使用自定义身份验证提供程序,该服务器将在资源服务器中调用不受保护的其他登录服务,这反过来验证用户对数据库。
如果响应成功(例如,用户名,密码,角色可以返回用户对象),那么我将从中创建一个UsernamePasswordAuthenticationToken对象并将其返回。
如果响应是 NOT 成功(例如返回对象为null或抛出异常),那么我将返回null或抛出AuthenticationException,这取决于Spring的行为......我和#39; t达到了那个学习的部分..
答案 1 :(得分:-1)
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实上的标准。
Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义要求
特点 对身份验证和授权的全面且可扩展的支持
防止会话固定、点击劫持、跨站点请求伪造等攻击
Servlet API 集成
与 Spring Web MVC 的可选集成