【发布时间】:2019-10-11 09:20:41
【问题描述】:
英语不是我的第一语言。我会尽力解释我自己。
我正在创建一个供客户端通过 Javascript 使用的 API。客户应在其网站上包含以下内容:
<script>
var my_api = {
public_key: "123456"
};
</script>
<script async src="https://api.example.com/v1/init.js"></script>
那么...如何使用公钥来验证客户的网站?
我知道我可以获取引用者并将其与我的数据库中的密钥进行比较,但是:
(a) 如果引用者可能是伪造的,那么公钥将没有用,因为它已经是公开的了
而且(b)如果引用者不能被伪造,我为什么要使用公钥?是不是不够用referer?
如果有人知道密钥,我不能要求客户加密某些东西来验证他是否拥有正确的密钥......
我过去只创建了具有私钥和公钥(或仅私有)的 API。
最后,我希望通过复制/粘贴几行 JS 代码将它全部安装在客户的网站上(这就是我只想使用公钥的原因)。
我知道这是可能的,因为这就是 Google Ads 的运作方式,我只需要帮助找出方法。
注意:我在论坛上搜索了其他主题,但找不到任何答案,只是与 SSH 和 nodeJS 有关。我正在用 PHP 和纯 JS 开发一个简单的 API。
【问题讨论】:
-
这就是为什么需要密钥的 API 通常不直接从客户端使用,它们必须从服务器使用。
-
是的,我知道。我以前开发过服务器端 API。但是 Google Ads、地图和其他著名服务都是这样工作的,所以,我不知道该怎么想。
-
如果他们这样做了,他们不会担心有人使用其他人的凭据。
-
可能......也许我必须考虑这是否可以成为一种方法。我想如果您没有显示敏感数据或者他们没有根据请求数量支付太多费用,这是一个选项。
-
Stripe API 就是一个很好的例子。每个供应商都有两个密钥,一个公钥和一个隐藏密钥。客户端使用公钥将信用卡输入转换为临时 Stripe 令牌。私钥在服务器上用于提交订单。公钥无法访问任何敏感信息。
标签: javascript api public-key