【问题标题】:How to use javascript api while protecting api key? [duplicate]如何在保护 api 密钥的同时使用 javascript api? [复制]
【发布时间】:2021-04-22 01:58:58
【问题描述】:

这里是初学者。我有一个通过 node.js (w/ express) 消耗Here's Geocoding REST API 的应用程序。 (我的 api 密钥在服务器端,所以对客户端隐藏。)

但我意识到要添加自定义标记和其他 UI 来映射数据,我还需要使用 Here's Javascript API。根据我在文档中看到的内容,我加载了 API 并在客户端实现了功能;但这意味着我的 api 密钥将被暴露。因此,我从根本上对如何在服务器端实现这个 javascript API 感到困惑(以便对客户端隐藏 api 密钥和代码)。

bundling 或带有 Next.js 的 SSR 会是答案吗?

这可能有一个明显的答案,但我找不到。任何见解将不胜感激。谢谢

【问题讨论】:

  • 它是否使用与 REST API 相同的 API 密钥?我不熟悉 Here API,但 Stripe 为客户端使用的 API 提供了一个单独的“公共”密钥,并为服务器 API 提供了一个“私有”密钥。客户端 API 非常有限,无法自行转移资金。
  • REST API 密钥与 javascript API 密钥是分开的(尽管他们说后者也可用于调用 REST API)。此外,没有公钥——只有一个私钥。
  • 在客户端公开的任何密钥实际上都是公开的。
  • 明白。它们提供了将受信任域列入白名单以发起请求的能力,因此我认为尽管 api 密钥是公开的,但这会提供一些保护。
  • 我很想问 HERE 开发人员您应该如何实现这一点。鼓励他们提供解决方案,如果他们还没有(而且他们似乎没有这样做)。理想情况下,他们会提供一个 API,您可以使用它来为 Web 客户端出售限时 API 密钥。您可以通过您的 webapp 代理所有 HERE 请求,您的 webapp 只需在调用 HERE 之前附加相关的 API 密钥(远非理想)。

标签: javascript node.js next.js here-api api-key


【解决方案1】:

我不知道那个特定的 API,但如果服务需要 API 密钥,那么您永远不应该以任何方式将该密钥暴露给客户端。

您可以通过创建自己的 API 并将机密存储在环境变量中来保护它:

使用Environment Variables 的内置系统来存储机密并排除 .gitignore 中的 .env 文件。这可以保护您免于将秘密提交到公共 git 存储库(以及其他优点)。 但是,这并不能防止您不小心将这些秘密暴露给客户。当您在客户端代码中使用环境变量时,它们将嵌入到包中并发送到客户端。 Next.js 实际上通过使 env 变量仅可用于服务器环境来保护您免于犯此错误,除非您通过在它们前面加上 NEXT_PUBLIC_ 来明确公开它们。

相反,创建您自己的后端并仅在此处使用密钥。您可以使用next.js API routes 轻松做到这一点。这样,客户端可以向您自己的 API 发出请求,然后您可以使用密钥对 Here API 进行实际调用。 创建您自己的后端还允许您通过限制用户可以执行的操作或使用用户身份验证来实施额外的保护。

【讨论】:

    【解决方案2】:

    如果您使用的是节点,您可能希望使用一些库,例如 dotenv,并将 API 密钥放在环境变量中。

    通过服务器对 API 的调用不会暴露给客户端。

    # .env file
    API_KEY="your api key goes here"
    
    # index.js
    require('dotenv').configure('./path_to_dotenv_file')
    
    const API_KEY = process.env.API_KEY;
    
    # use API_KEY to make any calls you need.
    

    请记住不要将.env 文件添加到您的存储库中,并且可以尝试为您的项目添加一些身份验证。

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2018-06-30
      • 2018-07-17
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 2019-11-29
      • 2019-01-12
      • 2018-07-04
      相关资源
      最近更新 更多