API身份验证如何仅在javascript上使用公钥?

API身份验证如何仅在javascript上使用公钥?,javascript,api,public-key,Javascript,Api,Public Key,英语不是我的第一语言。我会尽力解释我自己 我正在创建一个API,供客户端通过Javascript使用。客户应在其网站上包括以下内容: <script> var my_api = { public_key: "123456" }; </script> <script async src="https://api.example.com/v1/init.js"></script> var my_api={ 公钥:

英语不是我的第一语言。我会尽力解释我自己


我正在创建一个API,供客户端通过Javascript使用。客户应在其网站上包括以下内容:

<script>
    var my_api = { 
        public_key: "123456"
    };
</script>
<script async src="https://api.example.com/v1/init.js"></script>

var my_api={
公钥:“123456”
};
所以。。。如何使用公钥验证客户端的网站

我知道我可以获取referer并将其与数据库中的密钥进行比较,但是:

(a) 如果referer可能是伪造的,那么公钥将不会有用,因为它已经是公共的

(b)如果引用者不能被伪造,我为什么要使用公钥?是不是跟推荐人在一起

我不能要求客户加密一些东西,如果他有正确的密钥,如果有人知道密钥

在过去,我只创建了同时使用私钥和公钥(或仅使用私钥)的API

最后,我希望通过复制/粘贴几行JS代码(这就是为什么我只想使用公钥)将所有这些都安装到客户端的网站上

我知道这是可能的,因为这就是谷歌广告的工作原理,我只需要帮助找出方法



注意:我在论坛上搜索了其他主题,但找不到任何答案,只找到了与SSH和NodeJ相关的内容。我正在用PHP和纯JS开发一个简单的API。

将API密钥放在他们的网站上可能会遇到的问题是,任何人都可以查看和使用它。在他们用来承载其站点的系统上使用
过程
环境变量。您可以使用此资源获取信息:

这就是为什么需要密钥的API通常不直接从客户端使用,而是从服务器使用。是的,我知道。我以前开发过服务器端API。但是谷歌广告、地图和其他著名的服务就是这样运作的,所以我不知道该怎么想。如果他们这么做了,他们就不会担心有人使用别人的证书。可能。。。也许我必须考虑这是否是一种方法。如果你没有显示敏感数据,或者他们没有根据请求数量支付太多费用,我想这是一个选择。一个很好的例子就是StripeAPI。每个供应商都有两个密钥,一个公钥和一个隐藏密钥。客户机中使用公钥将信用卡输入转换为临时条带令牌。私钥在服务器上用于提交订单。公钥不能访问任何敏感的东西。难道他们不能修改JS并使用类似
console.log(ENV.myApiKey)的东西吗
要查看密钥?不能对后端设置的环境变量使用
控制台.log
(来自DOM)。DOM javascript!=还有,你说的“修改JS”是什么意思?是否要在浏览器的控制台中键入?有权访问非执行就绪javascript的人肯定有权找到api密钥。。。好吧,有了你更新的新链接,我可以更好地理解环境变量是什么。但是,遗憾的是,这看起来像Node.js,我不能强制所有客户机使用nodeJS。我需要纯Javascript,比如谷歌广告或谷歌地图。这个答案似乎是在谈论服务器端技术。问题是如何从客户端进行API调用。