我已经构建了一个人们打算在javascript中使用的API(客户端,而不是Node.js)。问题是我需要知道谁在使用我的API。如果我的人员在对我的API的ajax调用中包含API密钥,那么任何人都可以看到他们的API密钥并使用它。
如果他们从他们的JS中调用它,我该如何识别我的API用户?
$.ajax(function(){
url: "http://usefulapi.com/get-things?api_key=123412341234134", // Anybody can see my API key.
data: { some_data }
});
答案 0 :(得分:2)
通常,我们使用公钥和私钥加密的组合进行API访问。私钥只有API知道,你可以根据公钥和私钥创建一个哈希,并在服务器端检查它们是否匹配。
接下来,将密钥限制为特定域是个好主意。在PHP中,您可以轻松使用$_SERVER['HTTP_ORIGIN']
超级全局来检查请求的来源。以下伪代码应该给你一些指示:
$domain = basename($_SERVER['HTTP_ORIGIN']);
$apiKey = $_REQUEST['api_key'];
// Now, get the private key for this domain
// Check the private and public keys match
// The request is either allowed or denied.
正如您所看到的,值得向您的数据库添加身份验证表,并在其中存储域,公钥和私钥,以便您可以对请求进行身份验证。