2013-02-01 50 views
0

我目前正在致力于通过远程网站提供一些服务的REST/JSON API。我不知道这些网站的最终客户,他们将/不应该有API服务器上的帐户。在API服务器上存在的唯一帐户将是标识网站的帐户。由于这是全部RESTful,因此所有通信都将在最终用户浏览器(通过javascript/JSON)和我的REST API服务之间进行,因此我如何确保系统不会被有兴趣增加中间人账单的第三方滥用? (中间人是网站转售我的服务的所有者)。你会推荐哪些验证方法可以起作用,并且会阻止用户仅仅从网站获取js代码并将其称为1000000次,以破坏网站所有者?我正在考虑使用HTTP_REFERER,并将其转换为IP地址(以找出哪个服务器托管代码,并基于此IP进行身份验证),但我认为HTTP_REFERER很容易被欺骗。我没有在API服务器上寻找我的客户的最终客户,这会破坏这个API的目的。第三方客户的休息API(AAA)

有些想法请吗?

感谢, 丹

回答

0

这可能不是一个选择,但我已经在这种情况下,以前做是为了对REST调用上面的代理。该网站调用其自己的内部服务,然后该服务调用您的REST调用。好处是,就像你说的那样,没有人可以直接打你的REST呼叫或者试图欺骗呼叫。

如果没有这样做,你可以实现一个像HMAC(http://en.wikipedia.org/wiki/Hash-based_message_authentication_code)这样的认证方案。我见过很多API使用它。

Using HMAC-SHA1 for API authentication - how to store the client password securely?

这里是Java代码可能看起来像验证:http://support.ooyala.com/developers/documentation/api/signature_java.html

无论哪种方式,我认为你必须做一些工作服务器端。否则,如果一切都是纯粹的客户端,人们可能能够对API进行逆向工程。

+0

我想用这样的东西:让远程网站首先打开一个认证链接,它将通过$ _SERVER ['REMOTE_ADDR']和服务器IP通过$ _SERVER ['SERVER_ADDR'提供最终用户IP地址'],然后该API将生成一个将由JS代码使用的到期令牌,该令牌将授权客户远程IP 5分钟左右。通过这种方式(使用fopen),我可以验证该IP地址是否来自我们的API来自有效网站,并且该客户可以在接下来的5分钟内做任何他想做的事情。你可以看到什么缺点? – Dan

+0

如果五分钟过期并且用户突然不能做什么,会发生什么?你们所有的潜在客户都使用PHP吗? – ryan1234

+0

他们使用的是无关紧要的,我的API服务器使用PHP并使用$ _SERVER的东西。我假设我可以在js代码中实现一个计时器,如果用户在该时间范围内没有离开当前页面,则会每隔300秒通过ajax调用auth文件(执行fopen的文件)。这将更新令牌。 – Dan