2016-07-07 182 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

相关问题