如何在客户端Javascript中隐藏API密钥

zc0qhyus  于 2023-01-04  发布在  Java
关注(0)|答案(3)|浏览(384)

现在我正在编写一个客户端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?我还能做什么?

pod7payv

pod7payv1#

简而言之:不可以,您无法在客户端应用中保护API密钥。
This article goes into some more detail
两个选项

  • 在服务器端进行API调用,然后从服务器端向客户端提供信息
  • 要求客户端使用自己的API密钥
20jt8wwn

20jt8wwn2#

如果你是在2020年阅读这篇文章的,并且不想开发服务器端代码,不管出于什么原因(节省托管成本等),无服务器函数可能是解决方案。
这也会从服务器端调用第三方API,但您不必开发成熟的服务器端API代理。
Netlify有关于这方面的文档。我猜其他提供商像AWS lambda,Google Cloud Function也提供类似的东西,但不确定。
https://github.com/netlify/code-examples/tree/master/function_examples/token-hider

优点无服务器管理
缺点供应商锁定

brgchamk

brgchamk3#

即使你的PHP解决方案,你不能隐藏你的userId。它可以很容易地打印在浏览器控制台访问consle.log(userId);。据我所知,任何是可用的客户端是脆弱的,可以很容易地被解码。即使你混淆你的API键,它仍然可以从客户端解码。
正确的做法是围绕需要键的API调用创建PHP Package 器,然后从Javascript调用该 Package 器。

相关问题