我们正在为一个带有UI web模块(Spring )的绿色领域项目设计安全性--客户机,以及RESTful服务web模块(CXF) --服务器,作为单独的war文件部署在同一个Websphere应用服务器中。系统应该使用Security进行安全保护,针对LDAP进行身份验证,并根据数据库进行授权。我们一直在寻找在这两个应用程序之间共享安全上下文的最佳解决方案,这样用户就可以在web中进行身份验证,并调用其对安全RESTful服务的AJAX调用。找到的备选方案:
我们在寻找一个更简单的解决方案。我们如何在这两个应用程序之间传播安全上下文?我们应该在UI web应用程序中实现身份验证,然后在DB中持久化会话,以便RESTful服务查找吗?CXF能提供一个解决方案吗?我们读过许多关于生成可以传递的“安全令牌”的线程,但是如何才能准确地使用Security来实现这一点,它是否足够安全呢?
期待任何想法或建议。
发布于 2013-04-23 05:51:39
您希望能够代表在UI web模块中验证的用户在服务器上执行REST服务。您描述的称为SingleSignOn的需求。最简单的方法是在REST WS调用期间传递带有用户名的HTTP头。(我希望您的REST客户端允许这样做)。若要以安全的方式执行此操作,请使用以下方法之一:
因此,使用SpringSecurity身份验证来保护两个应用程序都是针对LDAP的。在第一个应用程序(Rest客户端)中,在第二个应用程序(Rest )中使用常规表单身份验证,添加您自己的PreAuthenticatedProcessingFilter:http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#d0e6167
编辑过的
“认证”是验证主体身份的过程。在我们的示例中,REST客户端(Spring应用程序)和REST服务器(CXF应用程序)都根据LDAP验证身份。LDAP“说”好或不可以。LDAP是一个用户存储库。它是无状态的,不记得以前的状态。它应该保存在申请中。
根据我的理解,用户不会直接访问REST服务器--用户总是访问REST客户端。因此,当用户访问REST客户端时,他/她提供了用户名和密码,并且REST客户端根据LDAP进行身份验证。因此,如果REST客户端访问REST服务器,则对用户进行身份验证,并且REST客户端知道他的名称。
因此,如果请求使用用户名REST服务器来REST服务器,肯定知道用户已经过身份验证,并且不应该再次根据LDAP对其进行身份验证。(如上文所述,报头应以安全的方式传递)。Rest Server应该使用用户名、访问LDAP和收集相关的用户信息,而无需提供用户密码(因为用户已经通过身份验证)。
https://stackoverflow.com/questions/16159710
复制相似问题