Skip to content

[Feature] API Key 存进系统密钥链(macOS Keychain / Windows 凭据管理器 / libsecret),而非本地加密文件 / Store API keys in the OS keychain instead of a local encrypted file #101

Description

@Alonso-li

Problem / 问题

API Key / Provider 凭据目前存在本地文件里(PI-Desktop 数据目录下的加密文件 + machine-key),没有接入操作系统凭证库:

  • 换台机器、备份迁移时,密钥文件随数据目录一起被复制,风险面大;
  • 没有利用 macOS Keychain / Windows 凭据管理器 / Linux libsecret 这类「受 OS 保护、可远程抹除」的存储;
  • 用户对密钥存哪、怎么加密基本不可见、不可选。

参考(Pi Agent Desktop / DLYZZT 生态):使用 electron.safeStorage(经 OS 加密),有 isEncryptionAvailable()encryptString / decryptString → 落盘也已经是加密后的密文,密钥本身不入自研文件格式。

Proposed change / 期望改动

  1. 首选系统密钥库:macOS Keychain(security / safeStorage)、Windows 凭据管理器(Credential Manager)、Linux libsecret;
  2. 选择回退:若系统密钥库不可用(如无头/受限环境),再回退到本地加密文件,并在设置里明确标注当前用的哪种存储;
  3. 迁移平滑:已保存的密钥可以一键「迁移到系统密钥库」,旧文件移除或仅留密文;
  4. 开发者体验:接入处集中封装(如 credential store 模块),MCP / 供应商 / 浏览器插件共用同一接口。

Alternatives / 其他方案

  • 维持本地加密文件现状(可用,但不如 OS 级 /chain 强);
  • 仅提示用户自备环境变量(治标)。

Additional context / 补充信息

  • 版本:PI-Desktop 0.14.1(macOS)
  • 现状:safeStorage / keychain / keyring 相关为 0,密钥走 app 本地加密文件 + machine-key
  • 参考:Pi Agent Desktop 用 electron.safeStorage.encryptString/decryptString 存取,isEncryptionAvailable() 判断可用性

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: securitySecrets, credentials, permissions, and security boundaries

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions