我正致力于在PHP上构建基于API的架构。
我想确保尝试使用不同API密钥使用我的API的客户端是授权客户端。例如,API密钥“ABCD1234”被分配给域“example.com”。如果域“fraud.com”尝试使用此API密钥,则他们应该无法使用API。如何在API端实现此检查?
根据我目前所看到的情况,客户端很容易传递一个引用者标题来“伪造”它的真实身份。
我还清楚地记得,当谷歌地图首次推出他们的API时,他们实施了类似的技术,只有授权的URL可以使用相应的API密钥。所以这似乎不属于可能性范围。
任何帮助/指示都将不胜感激。
谢谢,
-Saf
答案 0 :(得分:1)
在服务器到服务器的情况下,您对域名的处理很少,因为不一定涉及任何域。它只是源自某个IP的传入(HTTP)请求。该IP不一定必须绑定到DNS系统中的任何主机条目。您可以做的最好的事情是要求您的客户注册允许的IP地址。反向DNS解决方案由于各种原因是不可行的,尤其是因为它们要求客户端正确设置反向DNS,这可能不切实际。
如果用例是浏览器端,则可以使用Google Maps方法,要求客户端在服务器中包含脚本,该脚本会检查浏览器中当前页面的位置。即便如此,这并不是完全可以证明的,就像客户端一样。检查HTTP Referer服务器端也是一个选项,但任何真正想要的人都很容易被破坏。结合起来,它可以使它变得非常困难,因此大多数滥用者都会被阻止。