开发者生态
morning
显示 HN:Electron 应用程序的 macOS 数据保护钥匙串
摘要
Secure storage for signed Electron and Node apps, backed by the modern macOS Data Protection Keychain . Protect items with code-signing access groups; share only with explicitly entitled apps (no secu...
token
store
account
and
only
mutable
desktop
string
value
the
2026-08-19
1 阅读
约8分钟阅读
biwills
字号:
签名的 Electron 和 Node 应用程序的安全存储,由现代 macOS 数据保护钥匙串支持。使用代码签名访问组保护项目;仅与明确授权的应用程序共享(无安全 CLI 访问权限) 限制程序包访问您的应用程序声明的项目名称 可选择要求设备所有者身份验证(Touch ID 或密码),或仅 Touch ID 存储 UTF-8 字符串和二进制值 import { openKeychainStore } from "keychain-store" ; const store = openKeychainStore ( { // 仅触摸 ID 身份验证 : { accessControl : "biometrics-only" } , // 内置 iCloud 同步 iCloudSync : true , // 支持不可变和可变帐户 account : [ "installation-id" ] , mutableAccounts : [ "desktop-token" , "desktop-refresh-token" ] , } ) ; // 包含 32 个随机字节的 Uint8Array const InstallationId = wait store . getOrCreate(“安装ID”);等待商店。 set ( "桌面令牌" , "应用程序令牌" ) ; // 字符串 | null const token = 等待存储。 get(“桌面令牌”,“字符串”); // Uint8Array | null const token = 等待存储。 get(“桌面令牌”,“Uint8Array”);账户声明不可变的钥匙串项目; mutableAccounts 声明可变帐户。商店可以访问他们的联合,而只有可变帐户可以更改或删除。名称恰好属于一个列表,并且任一列表都可以省略。方法 作用 get(account, "Uint8Array") 返回存储的二进制数据,或 null 。 get(account, "string") 返回存储的 UTF-8 字符串,或 null 。 getOrCreate(account) 返回现有值或创建 32 个随机字节。 getOrCreate(account, value) 返回现有值或创建提供的字符串或字节。 set(account, value) 创建或替换可变项。 remove(account) 删除可变项并报告它是否存在。 status(account) 检查项目的状态而不返回其值。正在运行的 Electron 或 Node 主机必须具有有效的 Apple 代码签名。默认情况下,程序包使用主机的捆绑包标识符作为其钥匙串服务,并允许 macOS 使用主机的私有钥匙串访问组。不需要包标识配置。选项 用途 keychainService 单独签名的应用程序的可选共享命名空间。 macOS 是否应要求用户进行身份验证。 iCloudSync 项目是否应通过 iCloud 钥匙串同步。帐户 商店可以访问的不可变项目名称。 mutableAccounts 商店可以访问、更改或删除的可变项目名称。此包将通用密码项存储在 macOS 的数据保护钥匙串中。其本机实现使用 SecItem API 和 kSecUseDataProtectionKeychain: true ,而不是旧的 Keychain 和 SecKeychain API 使用的基于文件的旧 Keychain。 Apple 建议在新工作中使用数据保护钥匙串,因为它支持现代访问组、iCloud 钥匙串和生物识别访问控制。请参阅 Apple 的钥匙串实施指南。 Aspect Legacy 基于文件的 Keychain 数据保护 Keychain(本包)API 目标 Keychain 和 SecKeychain ;未设置数据保护目标时的 SecItem 带有 kSecUseDataProtectionKeychain 的 SecItem:true 访问模型 每项访问控制列表 ( SecAccess ) 代码签名权利访问组,可选由 SecAccessControl 补充 iCloud Keychain 不支持 iCloudSync 支持:true 生物识别保护 不受其旧访问模型支持 支持身份验证:{ accessControl: "biometrics-only" } 命令行检查 安全 CLI 可以检查钥匙串文件 安全 CLI 不支持直接检查这些项目 钥匙串访问位置 登录、系统和其他基于文件的钥匙串 本地项目或同步项目的 iCloud 钥匙串 可用性 可由用户登录上下文之外的进程使用 需要用户登录上下文 通过旧版基于文件的钥匙串 API 创建的项目在此处不会自动可用;如果需要,明确迁移它们。同样,安全 CLI 也不是该商店商品的检查路径。请改用钥匙串访问:当 iCloudSync 为 false 时,项目显示在本地项目下;当 iCloudSync 为 true 时,项目显示在 iCloud 钥匙串下。设置签名的 Electron 开发运行时 未经修改的 Electron 运行时将自身标识为 Electron,因此对于应用程序的开发秘密来说,它不是一个好的命名空间。相反,使用签名为单独开发应用程序的缓存 Electron 运行时运行 Electron Vite,例如 com.example.product.dev 。如果没有 keychainService ,相同的 openKeychainStore() 调用会自动使用该包标识符,从而使本地值与生产环境分开。 1. 创建开发签名配置文件 在 Apple 开发人员门户中,注册 com.example.product.dev 并为其创建 macOS 开发配置文件。启用钥匙串共享。配置文件必须允许此完整访问组:ABCDE12345.com.example.product.dev 将 ABCDE12345 替换为您的 Apple 开发人员团队 ID。 Xcode 可以为您创建配置文件:制作一个临时 macOS 应用程序
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱