现在我正在编写一个客户端javascript应用程序,它向USPS Price Calculator API发出请求。为了发出此请求,我需要在请求的xml中提供我的API用户ID。标签看起来像这样:
<RateV4Request USERID="ThisIsWhereMyUserIdGoes">
。我的问题是:有什么方法可以将我的用户ID提供给javascript,同时仍然将其隐藏在查看客户端文件的用户身上。现在,我唯一的解决方案是在我的服务器中创建一个具有User ID的PHP文件,然后在客户端javascript中使用AJAX请求将其存储在全局变量中。它看起来像这样:
var userID;
$.get("/secrets.php", function( data ) {
userID = data;
});
这是否足以让我的应用用户看不到我的API用户ID?我还能做什么?
答案 0 :(得分:5)
即使使用PHP解决方案,也无法隐藏userId。通过访问consle.log(userId);
,可以在浏览器控制台中轻松打印。据我所知,客户端可用的任何东西都很脆弱,很容易被解码。即使您混淆了api密钥,它仍然可以从客户端解码。
正确的做法是围绕需要密钥的API调用创建一个PHP包装器,然后从Javascript调用该包装器。
答案 1 :(得分:5)
简而言之:不,您无法在客户端应用中保护您的API密钥。
This article goes into some more detail
两个选项
答案 2 :(得分:2)
如果您在2020年阅读此页面,并且出于各种原因(节省主机成本等)而不想开发服务器端代码,则无数功能可能是解决方案。
这也从服务器端调用了第三方API,但是您不必开发成熟的服务器端API代理。
Netlify有与此相关的文档。我猜想像AWS lambda,Google云功能之类的其他提供程序也提供类似的功能,但不确定。
https://github.com/netlify/code-examples/tree/master/function_examples/token-hider
专业人士 没有服务器管理
缺点 供应商锁定