保护RESTful API

时间:2010-12-20 15:55:06

标签: security api authentication rest restful-authentication

对于我目前的副项目,这是一个模块化的Web管理系统(可能包含用于数据库管理,cms,项目管理,资源管理,时间跟踪等的模块......),我想将整个系统公开为RESTful我认为API将使系统更加可用。系统本身将在ASP.MET MVC3中编码,但如果我通过RESTful API提供所有数据/操作,那么应该使系统非常容易使用PHP,Ruby,Python等......(他们甚至可以如果需要,可以使用自己的界面来管理某些数据。

然而,使用RESTful API轻松做一件事(从用户使用RESTful API的角度来看)是具有ajax功能的安全性。如果我想要一些设置和使用复杂的东西,我只会创建SOAP服务,但使用RESTful API的整个驱动器非常容易。使用与用户关联的密钥保护RESTful API的最常用方法。当所有调用都在服务器端完成时,这可以正常工作,但是一旦你开始执行ajax功能,那就会发生变化。我希望能够直接从javascript调用RESTful API,但是任何firebug都可以轻松访问用户正在使用的密钥,允许该人访问系统。有没有更好的方法来保护RESTful API,它不会让RESTful API的用户做复杂的事情只是为了设置它?

2 个答案:

答案 0 :(得分:0)

首先,您无法阻止API的用户不公开其密钥。

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

另外,我建议您更深入地了解OAuth Nonces和时间戳。 Twitter和其他API提供商显然也有这个问题,因此他们必须使用Nonce值做一些事情。

答案 1 :(得分:0)

可以通过javascript在请求中进行一些签名。但我很确定,“RESTfull”网址将如何使用这些额外的信息。而且你有同样的问题:任何能看到你的制作签名算法的人都可以制作自己的签名,服务器也可以接受。