【问题标题】:Securing API Keys In JAM Stack保护 JAM 堆栈中的 API 密钥
【发布时间】:2019-04-19 08:33:20
【问题描述】:

我是 JAM 堆栈的新手。 JAM 堆栈中的 Web 应用程序(我在 Netlify 中托管我的应用程序)将完全依赖 API 来存储信息和身份验证,对吗?

所以我担心我必须在我的 JavaScript 代码中公开我的所有 API 密钥。任何知道如何打开站点源代码的人都可以看到我的 API 机密并且很容易被滥用。

我正在阅读 Github 上 JAM 堆栈 repo here 中的一个未解决问题

如何保护我的 API 密钥免遭窃听和滥用?

在这种情况下,“最佳实践”是什么?

提前致谢

【问题讨论】:

  • 不太清楚你为什么要问这个问题,因为 ypu 提供的链接有很多关于如何解决这个问题的解决方案,甚至是使用 Netlify 时的一个例子netlify.com/blog/2016/10/04/…
  • 我也上过那个链接。用户可以查看Webpack变量吗?所以这不是一种安全的方式吗?对不起,如果我错了。
  • 好点和正确。您是否尝试过运行 api 调用服务器端。例如。调用您的服务器获取数据,确保用户会话有效。让服务器使用 API 密钥请求并返回数据
  • 我想这也是不可能的。由于我使用的是 JAM 方法并且没有运行服务器端代码
  • 我为 Netlify 工作,我同意你不希望你的环境变量直接出现在你的静态内容中,除非它们是公钥或类似的预期可见变量。

标签: javascript netlify jamstack


【解决方案1】:

免责声明:我为 Netlify 工作

这是一个常见问题,Netlify 确实开发了一些功能来处理这个问题,而无需您运行任何额外的服务。两者都在本文中展示,但我将在这里总结:https://www.netlify.com/docs/redirects/#structured-configuration

  1. 您可以使用headers 指令在netlify.toml 中重定向到具有特殊HTTP 标头的其他服务(仅限- 不在_redirects 中!)

  2. 如果您的远程服务可以验证签名并拒绝未签名的请求,Netlify 将使用 JWS 对您的请求进行签名,因此其他人无法成功使用您的密钥。您可以使用signed 指令进行重定向(仅在netlify.toml 中,而不是在_redirects 中)。

这两者都要求您对 API 有一定的控制权(或者让它支持在接受您的 API 请求之前需要其中一种配置)。

如果您无法控制 API,您可以考虑使用 function 将它们添加到 API 请求中,实际上是为您代理。请注意,这有点复杂,并且有一个硬限制,即您的代码 + 代理 + 响应必须在 10 秒内发生,只要您在 Netlify 上默认调用函数即可。

【讨论】:

  • 我想我必须选择第二个选项(因为我无法控制 Mlab 或 Stitch API)。所以,我不确定我是否可以在不经常失败的情况下实现它。
猜你喜欢
  • 2018-07-17
  • 2016-05-12
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多