PHP REST API客户端验证

时间:2012-10-31 20:11:36

标签: php api rest authentication verification

我正致力于在PHP上构建基于API的架构。

我想确保尝试使用不同API密钥使用我的API的客户端是授权客户端。例如,API密钥“ABCD1234”被分配给域“example.com”。如果域“fraud.com”尝试使用此API密钥,则他们应该无法使用API​​。如何在API端实现此检查?

根据我目前所看到的情况,客户端很容易传递一个引用者标题来“伪造”它的真实身份。

我还清楚地记得,当谷歌地图首次推出他们的API时,他们实施了类似的技术,只有授权的URL可以使用相应的API密钥。所以这似乎不属于可能性范围。

任何帮助/指示都将不胜感激。

谢谢,

-Saf

1 个答案:

答案 0 :(得分:1)

在服务器到服务器的情况下,您对域名的处理很少,因为不一定涉及任何域。它只是源自某个IP的传入(HTTP)请求。该IP不一定必须绑定到DNS系统中的任何主机条目。您可以做的最好的事情是要求您的客户注册允许的IP地址。反向DNS解决方案由于各种原因是不可行的,尤其是因为它们要求客户端正确设置反向DNS,这可能不切实际。

如果用例是浏览器端,则可以使用Google Maps方法,要求客户端在服务器中包含脚本,该脚本会检查浏览器中当前页面的位置。即便如此,这并不是完全可以证明的,就像客户端一样。检查HTTP Referer服务器端也是一个选项,但任何真正想要的人都很容易被破坏。结合起来,它可以使它变得非常困难,因此大多数滥用者都会被阻止。