验证和授权用户使用共享Web服务时遇到的架构挑战

时间:2015-12-02 22:41:08

标签: java web-applications architecture

enter image description here

我目前的Web应用程序系统架构如上所示。本质上,它只是一个代码库,它被部署在不同的上下文中,例如,app1.localhost.com,app2.localhost.com。

这些是我目前的挑战 -

  • 我需要使用来自用户浏览器的ajax调用来查询我的webservices。但是,不知怎的,我需要告诉web服务,请求来自user1 for app1或user2或app2。因此,Web服务可以查询数据库中的正确模式并返回结果。
  • 我的网络服务需要无国籍。
  • 我无法让用户篡改浏览器的请求。

这是一个有缺陷的模型吗?我的期望是否超出标准的做法?实现这种架构的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

让我们一步一步地完成这个过程。

因此,您的网络服务需要了解应用程序和用户。

简单:只需将其作为参数或作为网址的一部分包含在请求中。

用户可能提供的一些信息也是如此。

挑战来自要求用户无法更改请求。

这通常是通过加密签名请求(或敏感部分)来实现的。我认为重播攻击也是一个问题。

为应用创建证书。

在应用程序服务器上创建nonce

使用证书对nonce,应用程序名称和用户名进行签名。

在用于ajax调用的请求中包含nonce,servername,username和signature。

检查网络服务中的随机数,服务器名,用户名和签名匹配

还要检查之前是否使用过nonce。

检查nonce确实需要一些状态,但只需要一个nonce列表。如果你使随机数增加,你甚至可以丢弃比你收到的最后一个小得多的任何小数,更多地限制状态量。

你应该检查这样的东西是否作为现成的协议存在,因为创建你自己的安全相关协议总是一个坏主意。