2016-07-07 180 views
3

現在我正在編寫一個客戶端JavaScript應用程序,向USPS價格計算器API發出請求。爲了提出這個請求,我需要在請求的xml中提供我的API用戶ID。標籤看起來像這樣: <RateV4Request USERID="ThisIsWhereMyUserIdGoes">。我的問題是:是否有任何方法可以將我的用戶ID提供給javascript,同時仍然從查看客戶端文件的用戶隱藏它。現在,我唯一的解決方案是在我的服務器中創建一個具有用戶ID的PHP文件,然後在客戶端JavaScript中使用AJAX請求將其存儲在全局變量中。它看起來像這樣:如何隱藏客戶端JavaScript中的API密鑰

var userID; 
$.get("/secrets.php", function(data) { 
     userID = data; 
}); 

這是保持我的API用戶ID不被我的應用程序的用戶看到的適當方式?我還能做什麼?

回答

4

簡而言之:不,您無法在客戶端應用程序中保護您的API密鑰。

This article goes into some more detail

兩個選項

  • 使API調用服務器端,然後從那裏服務信息給客戶端
  • 要求客戶端使用自己的API密鑰
+0

如何做第二個選項?有人可以更詳細地描述它嗎?客戶端如何將他/她自己的api密鑰傳遞給所謂的服務器端,以便服務器可以驗證api密鑰? –

5

即使使用您的PHP解決方案,您也無法隱藏您的userId。通過訪問consle.log(userId);可以輕鬆地在瀏覽器控制檯中打印。據我所知,客戶端可用的任何東西都很脆弱,並且很容易被解碼。即使你混淆你的api密鑰,它仍然可以從客戶端解碼。

正確的做法是圍繞需要密鑰的API調用創建一個PHP包裝器,然後從Javascript調用該包裝器。

+0

即使所以,客戶端仍然需要將api密鑰傳遞給服務器端,對吧?那麼API密鑰仍然需要放在網頁源代碼中的Javascript代碼中,對吧?我在這裏有誤解嗎? –

+0

不,只需在服務器端使用api密鑰 – shivgre

相關問題