展示HN:用于Electron应用的macOS数据保护钥匙串
安全存储用于签名的Electron和Node应用,基于现代macOS数据保护钥匙串。用代码签名访问组保护项目;只与明确授权的应用共享(没有安全CLI访问)限制对您的应用声明的项目名称的包访问可选要求设备所有者身份验证(Touch ID或密码)或仅Touch ID存储UTF-8字符串和二进制值安装pnpm添加keychain-store快速入门导入{ openKeychainStore }从"keychain-store";const store = openKeychainStore({//仅Touch ID身份验证:{ accessControl:"biometrics-only" },//内置iCloud同步iCloudSync:true,//支持不可变和可变帐户账户:["installation-id"],mutableAccounts:["desktop-token","desktop-refresh-token"],});//包含32个随机字节的Uint8Array const installationId = await store.getOrCreate("installation-id");await store.set("desktop-token","一个应用程序令牌");//字符串|空 const token = await store.get("desktop-token","字符串");//Uint8Array |空 const token = await store.get("desktop-token","Uint8Array");账户声明不可变钥匙串项目;mutableAccounts声明可变项目。该存储可以访问它们的并集,而只有可变账户可能会被更改或删除。名称必须只出现在一个列表中,且任一列表可以省略。API方法及其作用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可选共享命名空间,用于单独签名的应用。authentication是否应询问用户进行身份验证。iCloudSync项目是否应通过iCloud钥匙串同步。accounts可存取的不可变项目名称。mutableAccounts可存取、改变或移除的可变项目名称。数据保护钥匙串该包将通用密码项目存储在macOS的数据保护钥匙串中。其本地实现使用SecItem API与kSecUseDataProtectionKeychain:true,而不是由较旧的钥匙串和SecKeychain API使用的遗留基于文件的钥匙串。Apple建议在新工作中使用数据保护钥匙串,因为它支持现代访问组、iCloud钥匙串和生物识别访问控制。请参阅Apple的钥匙串实现指导。方面遗留基于文件的钥匙串数据保护钥匙串(此包)API目标钥匙串和SecKeychain;如果未设置数据保护目标,则为SecItem SecItem与kSecUseDataProtectionKeychain:true访问模型每项访问控制列表(SecAccess)代码签名授权访问组,可能增加SecAccessControl iCloud钥匙串不支持支持,iCloudSync:true生物识别保护通过其遗留访问模型不支持受支持,通过身份验证:{ accessControl:"biometrics-only" }命令行检查安全CLI可以检查钥匙串文件安全CLI不直接检查这些项目钥匙串访问位置登录、系统和其他基于文件的钥匙串本地项目,或用于同步项目的iCloud钥匙串可用性可以被用户登录上下文外的进程使用需要用户登录上下文通过遗留基于文件的钥匙串API创建的项目不会自动在此可用;如果需要,必须显式迁移。安全CLI也不是此存储项目的检查路径。请使用钥匙串访问:项目在iCloudSync为false时显示在本地项目下,或者在它为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
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡