带有jQuery前端的REST Web服务安全性



感谢阅读。

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

我一直是密钥方法的粉丝,所以我绞尽脑汁想知道如何在这种类型的web应用程序架构中使用它,但我不知所措。基本上,会生成一个密钥,并将其放置在服务器上,也会将其提供给客户端(因此密钥永远不会通过网络发送),并且每个客户端请求都必须使用该密钥进行数字"签名"。这将是你通常在网络应用程序中看到的典型用户名/密码/会话id结构的补充。

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

以下是我想要的工作方式:

  1. 后端进程每隔一段时间(5-15分钟)生成一个密钥,并将其放入后端数据库以及web服务器上非公共位置的文件中
  2. 当客户端发出请求时,它会读取密钥文件,然后用密钥对请求进行数字签名
  3. 服务器接收请求并使用密钥对其进行解码

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

我是不是太偏执了?密钥方法很好,因为它具有高于用户名/密码的另一个安全级别(攻击者需要密钥和有效的用户名/密码),如果我每5分钟重新生成一次密钥,那么如果密钥泄漏,风险就会降低。这也确保了所有请求都是从"经过认证"的客户端发出的。但是我看不出使用像html/jQuery这样的未编译代码是怎么可能的。

有人对RESTful web服务的安全方法有什么建议或文章吗?

谢谢:)

Vince

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

我一直觉得Netflix的"身份验证概述"对客户来说是一个很好的解释。

在谷歌上快速搜索后会发现:如何:在JavaScript 中保护OAuth

最新更新