对于我目前的side项目,这是一个模块化的web管理系统(可以包含数据库管理、cms、项目管理、资源管理、时间跟踪等模块,等等…),我希望将整个系统公开为RESTful应用程序接口,因为我认为这将使系统更易于使用。系统本身将使用ASP.MET MVC3进行编码,但是如果我通过PHP提供所有的数据/操作,这将使系统非常容易与RESTful、RESTful、Python等…一起使用(如果他们愿意,他们甚至可以制作自己的界面来管理某些数据)。
然而,对于ajax应用程序接口,有一件事似乎很难做到(从用户使用ajax应用程序接口的角度来看),那就是具有RESTful功能的安全性。如果我想要一些设置和使用起来很复杂的东西,我只需要创建SOAP服务,但是使用RESTful应用程序接口的整个驱动力就是它非常简单。保护RESTful应用程序接口的最常见方法是使用与用户关联的密钥。当所有调用都在服务器端完成时,这种方法工作得很好。但是,一旦开始使用ajax功能,情况就会发生变化。我希望RESTful应用程序接口能够直接从javascript调用,但是任何有firebug的人都可以很容易地访问用户正在使用的密钥,从而允许该用户访问系统。有没有更好的方法来保护一个RESTful应用程序接口,而不是让RESTful应用程序接口的用户仅仅为了设置它而做一些复杂的事情?
发布于 2010-12-21 00:33:57
首先,您不能阻止API的用户不公开他的密钥。
但是,如果您正在为您的API编写客户端,我建议您使用服务器端来执行对API的任何请求,而您的HTML页面提供来自用户的数据。如果您绝对必须使用Javascript来调用API,并且您仍然有一个服务器端填充有问题的页面,那么您可以在生成页面时通过依赖于时间戳的单向摘要算法来隐藏实际的密钥,并使您的api以依赖于时间的方式检查该摘要。
此外,我建议您更深入地研究一下OAuth随机数和时间戳。Twitter和其他API提供商显然也有这个问题,所以他们必须对Nonce值做一些处理。
发布于 2010-12-28 20:57:58
可以在来自javascript请求中进行一些签名。但我敢肯定,有了这些额外的信息,'RESTfull‘urls会是怎样的。你也有同样的问题:任何可以看到你的生成签名算法的人都可以制作自己的签名,你的服务器也会接受这个签名。
https://stackoverflow.com/questions/4491289
复制相似问题