Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中调用API时,如何识别API的用户?_Javascript_Api - Fatal编程技术网

Javascript 在JS中调用API时,如何识别API的用户?

Javascript 在JS中调用API时,如何识别API的用户?,javascript,api,Javascript,Api,我构建了一个API,人们可以在javascript中使用它(客户端,而不是Node.js)。问题是我需要知道谁在使用我的API。如果我让人们在对我的API的ajax调用中包含API键,任何人都可以看到他们的API键并使用它 如果API的用户是从JS调用的,我如何识别他们 $.ajax(function(){ url: "http://usefulapi.com/get-things?api_key=123412341234134", // Anybody can see my API key

我构建了一个API,人们可以在javascript中使用它(客户端,而不是Node.js)。问题是我需要知道谁在使用我的API。如果我让人们在对我的API的ajax调用中包含API键,任何人都可以看到他们的API键并使用它

如果API的用户是从JS调用的,我如何识别他们

$.ajax(function(){
  url: "http://usefulapi.com/get-things?api_key=123412341234134", // Anybody can see my API key.
  data: { some_data }
});

通常,我们对API访问使用公钥和私钥加密的组合。私钥只有API知道,您可以基于公钥和私钥创建哈希,并在服务器端检查它们是否匹配

接下来,将密钥限制在特定域是一个好主意。在PHP中,您可以轻松地使用
$\u服务器['HTTP\u 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.

正如您将看到的,值得向数据库中添加一个身份验证表,并将域、公钥和私钥存储在其中,以便您可以对请求进行身份验证。

1)使用公钥和私钥加密。2) 仅将密钥分配给域,以便密钥仅在请求来自特定域时有效。API是用什么语言编写的?在本例中是PHP?节点,但我认为它也与我需要处理的rails API相关