在反应应用程序中保存 api 密钥的真正位置/方式是啥?

Posted

技术标签:

【中文标题】在反应应用程序中保存 api 密钥的真正位置/方式是啥?【英文标题】:What is the true place/way to save api keys in react app?在反应应用程序中保存 api 密钥的真正位置/方式是什么? 【发布时间】:2020-04-28 02:00:06 【问题描述】:

我正在团队中处理一个 React 项目。我们正在使用一些第三方服务,这些服务需要 api 密钥。现在我们将这些密钥存储在代码中。据我所知,这既不好又危险。

I tried to find some recommendations in that regard。我现在看到的解决这个问题的所有方法都是:

创建.env 文件并将所有密钥存储在那里(但在这种情况下,我需要与团队的其他成员共享我的密钥) 或将所有密钥移至服务器并始终调用服务器以获取所需信息(但在这种情况下,我不知道如何使用需要密钥的外部组件,例如谷歌地图/地点/绘画等)。

您在团队中使用哪种方式,为什么?我想了解什么是对我来说最好的解决方案。 谢谢!

【问题讨论】:

这取决于按键。如果它是 public key 那么没关系,你可以在面向公众的东西中使用它(因为这毕竟是 public 密钥的想法),但如果它是 PRIVATE 键,那么您绝对 需要 将这些服务器端作为环境变量,并通过调用您自己的 API 来利用它们。你不能将这些嵌入到前端应用程序中,因为这些键可以让人们做邪恶的事情。关于与团队共享它们,如果它们是私有环境变量,那么您可以与他们共享,而不是与公众共享。 那些“外部”组件不是。它们与所有其他组件在同一页面中运行。它们以相同的方式接收属性 - 它们可以是硬编码的,它们可以是组件属性的一部分,或者您可以在每次调用中检索它们并将它们传递给下游。它们可以加载一次并存储在商店中。 作为the answers to this question explain 将密钥放入.env 是不够的。这些值包含在构建中,因此您将与整个世界共享该密钥,而不仅仅是您的团队 您已经链接到具有实际答案的文章。 环境变量无论如何都会发送给客户端。它们可以直接从源中查看。从服务器请求密钥更安全有人可以使用开发工具中的“网络”选项卡检查往返。您发布的链接解释说 safe 选项是在服务器端进行调用并将输出发送到客户端 @IvanBanha 我会的。想象一下,您有自己的 node.js 服务器,它将存储所有密钥。您可以从此服务器调用外部资源并从它们那里获取响应。您应该在自己的服务器上编写多个端点以从前端触发它,然后您将拥有所有数据而没有安全风险 【参考方案1】:

您无法真正隐藏用于客户端 API(例如 javascript API 及其服务)的 API 密钥。保护 API 密钥的正确方法是添加 API 密钥限制。

在API Key Best Practices 上查看 Google 指南。您可能还想看看this answer。

希望这会有所帮助!

【讨论】:

以上是关于在反应应用程序中保存 api 密钥的真正位置/方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在反应应用程序中保护 Firebase API 密钥以使其无法公开访问的最佳方法是啥? [复制]

在应用程序中安全地保存密钥或字符串 - Xamarin 表单

在Swift上存储API密钥的位置?

未指定应用程序加密密钥(反应)

是否有将 API 密钥和秘密保存到数据库中的最佳实践?

是否可以为 Mandrill 创建“开发”API 密钥?