微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Vue CLI 4 和 Electron 项目中保护环境变量中的 API 密钥

如何解决如何在 Vue CLI 4 和 Electron 项目中保护环境变量中的 API 密钥

我正在尝试开发一个桌面应用程序,该应用程序需要进行一些私有 API 调用,并使用一些密钥进行身份验证。

密钥是由我组织之外的外部 IT 服务提供商为我创建的 - 他们负责安全,因此有一些限制:

  1. 他们说,即使他们已经采取措施保护 API,并且即使发生违规行为也有缓解策略,但他们仍然希望确保我以安全意识对待密钥心态,并采取一切可能的措施来确保它们的安全。
  2. 我不允许仅在私有服务器或无服务器平台上创建随机中间件/网关来代表我的应用执行 API 调用,因为这些调用可能包含业务数据。

我做了一些研究,根据我所能找到的,一般建议是在项目文件夹中设置一个“.env”文件,并在该文件中使用环境变量来存储 API 密钥。

但在阅读 Vue CLI documentation 后,我发现了以下内容

警告

不要在您的应用中存储任何秘密(例如私有 API 密钥)!

环境变量被嵌入到构建中,这意味着任何人都可以 通过检查您应用的文件来查看它们。

那么,鉴于这些限制,有没有办法将这些密钥安全地存储在 Vue CLI 4 + Electron 桌面应用程序项目中?

谢谢。

解决方法

一般来说,特别是当你有很多环境变量时,最好将环境变量存储在一个点 env 文件(.env)中,但是,当你打包你的电子时,这个文件可能会泄漏应用程序。因此,在这种情况下,最好从终端/命令行存储环境变量。为此,请遵循本指南 (https://www.electronjs.org/docs/api/environment-variables)。

请记住,任何需要 API 密钥/私有信息的内容都尽量将其保留在后端,即电子进程并将结果发送到 Vue 前端。

以下是您可以如何实现此功能的示例:

在来自 CMD 的窗口上:

set SOME_SECRET="a cool secret"

在 POSIX 上:

$ export SOME_SECRET="a cool secret"

主要流程:

// Other electron logic
const { ipcMain } = require("electron");

// Listen for an event sent from the client to do something with the secret
ipcMain.on("doSomethingOnTheBackend",(event,data) => {
    API.post("https://example.com/some/api/endpoint",{token: process.env.SOME_SECRET,data});
});

客户端:

const { ipcRenderer } = require("electron");

ipcRenderer.send("doSomethingOnTheBackend",{username: "test",password: "some password"});

另请注意,要在客户端使用 ipcRenderer nodeIntegration 需要启用。

这里有更多资源可以帮助您入门:

https://www.electronjs.org/docs/api/ipc-renderer

https://www.electronjs.org/docs/api/ipc-main

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?