Electron 接 AI 助手,鉴权 key 藏哪安全

7 阅读2分钟

给一个 Electron 桌面工具加了个 AI 助手面板。功能不复杂,卡我最久的反而是一个安全问题:调模型的鉴权 key 该藏在哪。桌面应用这点和 Web 不太一样,记一下我的思考过程。

为什么 Electron 更头疼

Web 应用里,key 藏后端就完事,浏览器永远碰不到。Electron 不一样——它本质是把前端代码打包进客户端,用户电脑上就有你全套代码。你以为藏好的东西,人家解个包就能翻出来。

我一开始想当然,把 key 写在渲染进程的代码里调模型。同事一句话点醒我:Electron 应用 asar 包随便解,字符串 key 等于明文贴用户桌面上。

几个方案过了一遍

方案一:key 写死在渲染进程。 直接否,等于裸奔。

方案二:放主进程,渲染进程通过 IPC 请求。 比写渲染进程强一点——主进程代码用户也能解,但至少不在前端 bundle 里裸着。然而 asar 一解照样能看到,治标不治本。

方案三:走自己的中转服务器。 最稳。客户端不存 key,所有模型请求打到自家服务器,服务器持 key 转发。安全等同 Web。代价是得维护一台服务器,离线就没法用了。

方案四:用户自带 key。 让用户在设置里填自己的 key,存本地加密。适合开发者工具类产品,把安全责任交给用户。

我最后怎么选的

这个工具要求开箱即用、不能让用户自己填 key,又不想为它单独养服务器。我的折中:用一个平台预先把对话能力配成接口——在一个零代码搭智能体的平台上把助手配好,它给我一个带受控鉴权的对话接口,真正的模型 key 由平台托管,客户端只拿一个作用域受限、可随时吊销的访问凭证走 IPC 调。

这样就算凭证被扒,影响面也可控,能后台直接废掉重发,不至于把核心 key 暴露。

没做到位的

凭证的本地存储我用了系统级的 safeStorage 加密,但轮换逻辑还是手动的,没做自动刷新,过期了得用户重新登录一次,体验上有个小断点。先这样。

模型那层我接的讯飞 MaaS,现成调用、key 不落客户端。你们 Electron 里的密钥都怎么处理?评论区交流下思路。