2014-07-25 51 views
1

我已經構建了一個人們打算在JavaScript(客戶端,而不是Node.js)中使用的API。問題是我需要知道誰在使用我的API。如果我的人在他們的ajax調用API中包含API密鑰,任何人都可以看到他們的API密鑰並使用它。如何在JS中調用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

1)使用公鑰和私鑰加密。 2)僅將密鑰分配給域,以便密鑰僅在請求來自特定域時有效。 – BenM

+0

用什麼語言編寫的API? PHP? – BenM

+0

在這種情況下的節點,但我認爲這與我需要的rails API有關 –

回答

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. 

如你所見,這是值得補充的認證表到您的數據庫,存儲域,公鑰和私鑰裏面,這樣你就可以驗證請求。

+0

有趣的是,謝謝BenM! –