2010-12-20 51 views
0

对于我目前的侧项目,这是一个模块化的网络管理系统(其中可能包含了数据库管理,内容管理系统,项目管理,资源管理,实时跟踪,等等模块),我要揭露整个系统作为RESTful API,因为我认为这会使系统更加可用。本身是要系统在ASP.MET MVC3进行编码但是如果我让所有的数据/可通过一个RESTful API的行为,应该使系统很容易与PHP和Ruby,Python和等使用......(他们甚至可以如果他们想要,可以有自己的界面来管理某些数据)。保护一个RESTful API

然而,有一两件事似乎很难做到容易(从用户的使用的角度的RESTful API点)与一个RESTful API与Ajax功能的安全性。如果我想要设置和使用很复杂的东西,我只需创建SOAP服务,但使用RESTful API的整个驱动器非常简单。使用与用户关联的密钥保护RESTful API的最常见方式。当所有的调用都在服务器端完成时,这可以正常工作,但是一旦开始执行ajax功能,即发生更改。我希望RESTful API能够直接从JavaScript调用,但是任何萤火虫的人都可以轻易地访问用户正在使用的密钥,允许该人访问系统。有没有一种更好的方式来保证RESTful API的安全,它不会让RESTful API的用户执行复杂的事情来设置它?

+0

请参阅[REST身份验证和公开API密钥](http://stackoverflow.com/questions/5472668/rest-authentication-and-exposing-the-api-key)。 – Arjan 2012-12-15 09:46:37

回答

0

一件事,你不能阻止你的API的用户不会暴露他的关键。

但是,如果您正在为您的API编写客户端,我会建议您使用服务器端对API执行任何请求,而HTML页面则提供用户的数据。如果您绝对必须使用Javascript来调用API,并且您仍然有一个服务器端来填充所涉及的页面,那么您可以通过单向摘要算法以时间戳相关的方式遮蔽实际的密钥,同时生成页面,并让你的API也以时间依赖的方式检查摘要。

另外,我建议你看看到OAuth的随机数,更深入地时间戳一点。 Twitter和其他API提供商显然也有这个问题,所以他们必须用Nonce值做些事情。

+0

我知道我不能阻止用户公开他们的密钥,我希望能够尝试为服务器和客户端提供一种向API发出请求的方式。我将更仔细地研究摘要访问认证。 – ryanzec 2010-12-20 17:00:39

0

有可能做出一些签名从JavaScript请求。但我很确定,RESTfull'urls如何与这个额外的信息。而且你也有同样的问题:任何人都可以看到你的制作签名算法可以自己签名,你的服务器也会接受。