分布式Web应用系统中的安全性

时间:2010-07-05 05:58:19

标签: java security distributed

我有一套三个网络应用系统--A,B& C用于维护我的应用程序。 A系统具有核心业务逻辑,还存储整个应用程序的用户/帐户数据。系统B& C需要为应用程序提供附加功能。

我在考虑一种安全机制,其中用户U登录到主系统A并且系统为当前会话创建安全令牌,这将需要验证来自用户U的请求到其他系统B& ; C.当用户登录系统A时,它在内部生成令牌并将令牌x-y-z发送到子系统B& C.现在,每当用户U向子系统B& B发送请求时。 C使用有效令牌,将允许用户访问资源。但是,我不确定这是最好的方法还是正确的方法。

所以,我对完整的工作流程感到有点困惑,我们将非常感谢这方面的任何帮助。

我使用Java开发,因此任何管理它的模块都将节省大量的开发时间。请指导我。

2 个答案:

答案 0 :(得分:2)

您所描述的此模型是一种信任托管形式,其中多个客户端信任第三方来处理用户身份验证。

请参阅Kerberos分布式安全系统。

Kerberos协议及其Web应用程序实现Stanford WebAuth比您所描述的更具优势:

  • 当用户登录时,无需将令牌从A发送到B + C.相反,A(Kerberos术语中的“KDC”)与B(“Kerberized服务器”)共享一个秘密,而一个与C仅在信任关系的初始设置时。
  • 该令牌无法被拦截,因为它永远不会以明文形式从A发送给用户。

如果您不需要完整的Kerberos身份验证(实现起来很复杂),我会鼓励这样的模型:

  • 用户Joe向A进行身份验证,最好使用质询 - 响应协议,该协议不涉及将Joe的密码发送给A
  • 以加密方式签署Joe的用户名,当前时间以及一些随机生成的垃圾
  • B和C接受指定时间范围内的用户,他们可以提供由A签名的包含其用户名和适当时间的包

这是一种基本的身份验证令牌协议。它在几个方面存在缺陷,但仍然比发送用户密码更好。

答案 1 :(得分:0)

这种安排也有效: 您可以将所有请求重定向到服务器A,B和C,首先只将服务器A重定向到服务器A,因为它具有您的所有用户相关数据。现在,一旦请求已经过身份验证(您希望使用哪种方法),并且在业务逻辑中,您需要在服务器之间进行INTERNAL调用。为此,您可以使用在每个服务器上创建部署时的内部用户,并将其授权令牌存储在钱包中。 从钱包中获取此内部用户的身份验证令牌并启动呼叫,其他服务器将授权用户。 注意:如果您需要执行此操作的实际用户,则无法从Auth Token派生该信息,因为该令牌属于内部用户。在这种情况下,您可以在http授权标头中传递当前登录的用户名。