【问题标题】:How does API authentication works with only public key on javascript?API 身份验证如何仅使用 javascript 上的公钥?
【发布时间】: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


【解决方案1】:

将 api 密钥放在他们的网站上可能会遇到的问题是任何人都可以查看和使用它。在他们用来托管其站点的系统上使用Process 环境变量。您可以使用此资源获取信息:https://hackernoon.com/how-to-use-environment-variables-keep-your-secret-keys-safe-secure-8b1a7877d69c

【讨论】:

  • 难道他们不能只修改JS并使用像console.log(ENV.myApiKey);这样的东西来查看密钥吗?
  • 您不能在后端设置的环境变量上使用console.log(来自 DOM)。 DOM javascript != Node.js
  • 另外,“修改 JS”是什么意思?就像在浏览器上输入控制台一样?有权访问非执行就绪 javascript 的人肯定可以访问能够找到 api 密钥。
  • 好的...好吧,有了更新中的新链接,我可以更好地理解环境变量是什么。但是,遗憾的是,这看起来是 Node.js,我不能强迫我所有的客户都使用 nodeJS。我需要纯 Javascript,例如 Google Ads 或 Google Maps。
  • 这个答案似乎在谈论服务器端技术。问题是关于从客户端进行 API 调用。
猜你喜欢
  • 2012-10-27
  • 2015-08-20
  • 2022-12-20
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多