现在,我正在编写一个客户端javascript应用程序,它向USPS Price Calculator API发出请求。为了提出这个请求,我需要在请求的xml中提供我的API用户ID。标记如下所示:
。我的问题是:有没有任何方法可以将我的用户ID提供给javascript,同时仍然对查看客户端文件的用户隐藏它。现在,唯一的解决方案是在服务器中创建一个具有用户ID的PHP文件,然后在客户端javascript中使用AJAX请求将其存储在全局变量中。它看起来是这样的:
var userID;
$.get("/secrets.php", function( data ) {
userID = data;
});
这是一个足够的方法来防止我的API用户ID被我的应用程序的用户看到吗?我还能做什么?
简而言之:不,你不能在客户端应用程序中保护你的API密钥。
这篇文章更详细地介绍了一些
两种选择
即使使用PHP解决方案,也不能隐藏用户ID。通过访问consle.log(userId);
,可以很容易地在浏览器控制台中打印它。据我所知,任何客户端可用的东西都是易受攻击的,很容易被破译。即使您混淆了您的api密钥,它仍然可以从客户端解码。
正确的做法是围绕需要键的API调用创建一个PHP包装器,然后从JavaScript调用该包装器。
如果您在2020年阅读本页,并且出于任何原因(节省托管成本等)不想开发服务器端代码,那么severless function可能是解决方案。
这也从服务器端调用第三方API,但您不必开发一个完全成熟的服务器端API代理。
Netlify有这方面的文档。我猜其他提供商像AWS lambda,谷歌云功能提供类似的东西,但不确定。
https://github.com/netlify/code-examples/Tree/master/function_examples/token-Hider
无服务器管理
卖主锁定