2011-06-20 55 views
3

感谢您的阅读。使用jQuery前端的REST Web服务安全性

我想开发一个安全的Web应用程序,使用jQuery作为前端,.NET MVC作为服务器端,其功能用RESTful Web服务表示。在这一点上,我试图设想我将使用的安全方案,但我想要一些关于最佳实践的建议(显然我将使用https/ssl,但当然还有更多)。

我一直都是秘密钥匙方法的粉丝,所以我试图弄清楚如何在这种类型的Web应用程序架构中使用它,但我很茫然。基本上,一个秘密密钥将被生成并放置在服务器以及给予客户端(因此密钥绝不会通过线路发送),并且每个客户端请求必须用此密钥进行数字“签名”。这是您通常在Web应用中看到的典型用户名/密码/会话ID结构的补充。

我的问题是密钥在客户端上的实际存储。由于jQuery文件只是坐在服务器上的.html文件,因此无法访问虚拟Web目录之外的目录中的密钥文件。将密钥文件放在公共网站上并不会带来太多秘密。 :)

这是我怎么会喜欢工作:

  1. 在一定的时间间隔(5-15分钟),后端工艺生成私钥,并把它无论是在后端数据库以及Web服务器上非公开位置的文件。
  2. 当客户端发出请求时,它会从密钥文件中读取数据,然后用密钥对请求进行数字签名。
  3. 服务器接收到请求并使用密钥进行解码。

但显然#2是问题,因为没有办法通过JavaScript访问“秘密”(即非公共)文件。

我是不是太偏执?秘密密钥方法很好,因为它具有超出用户名/密码的另一级别的安全性(攻击者需要密钥和有效的用户名/密码),并且如果每5分钟重新生成一次密钥,那么风险将会降低秘密密钥会泄漏。这也确保了所有请求都来自“经过认证”的客户端。但我不明白如何使用诸如html/jQuery之类的非编译代码。

有没有人有任何关于REST风格的Web服务安全方法的建议或文章?

谢谢:)

文斯

回答

2

如果您还没有准备好,我建议你在OAuth 1.02.0一些阅读。它们都被更大的API使用,比如Facebook,Netflix,Twitter等等。 2.0仍在草案中,但这并没有阻止任何人实施它并使用它,因为它对于客户来说更简单。这听起来像你想要更复杂和更安全的东西,所以你可能要专注于1.0。

我总是发现Netflix的Authentication Overview是客户的一个很好的解释。

而且一个快速的谷歌搜索给出了这篇文章:How-to: Secure OAuth in JavaScript