我需要使用 Electron js 存储登录凭据,因为它不像所有浏览器那样保存它们。我见过很多这样的问题,但我一直没有找到解决方案。我在电子文档中看到了有关
safeStorage
功能的内容。它是否足够安全/足够好,可以在客户端存储登录凭据?如果没有,还有什么其他工具可以做到这一点?我听说过keytar
,但是它好吗?
safeStorage
API 公开了操作系统级加密/解密使用当前用户的密钥 - 请参阅电子源和chromium 的os_crypt
。在 Windows 上,它使用 DPAPI,而在 *nixes 上,它使用操作系统具有的任何密码管理器(如文档建议)。
是否足够安全/足够好,可以在客户端存储登录凭据?
取决于,您应该首先定义“安全”。
问问自己,是否应该允许同一用户读取加密文本中的任何值?一个有技术素养的人可能会编写自己的工具来解密你使用 API 存储的东西,但你运气不好。请参阅此 QA 进行进一步讨论。
如果没有,还有什么其他工具可以做到这一点?
有很多工具(和加密算法)可以对 Nodejs 中的内容进行加密。但是,您必须记住加密要求您拥有某种密钥,并且密钥也需要受到保护。因此,请尽量避免钥匙中的钥匙出现蛋鸡问题。
基于操作系统的密钥存储通过仅使用其 API 访问的方式存储“主密钥”,避免了密钥的密钥问题。在运行时,您根本无法检索密钥,您只需发送一组字节供操作系统神奇地加密/解密。空闲时,操作系统可能依赖于安全存储,例如TPM(可信平台模块)。
Electron 的
是密码和登录凭证吗?safeStorage
取决于,如果您正在运行网络服务,最好不要这样做。您永远不应该将最终用户的用户名/密码直接转储到您自己无法保证其安全性的存储(例如您的服务器)上。您应该放置一个可以撤销或可能在以后过期的标识符 - 令牌或 cookie。
想象一下当您的最终用户设备被盗时的麻烦。如果它是令牌/cookie,他们可以请求您撤销该设备的访问权限 - 类似于“从所有其他设备中注销我。”
但是,如果它是一个可以对自身进行身份验证的现场应用程序,那么它是一个公平的游戏 - 但请记住第一点。这完全取决于您的安全模型。
Tl;博士keytar: 它是 Windows Credentials、Libsecret 和 Keychain 的包装器,如源代码所示。
它基本上做了
safeStorage
已经做的事情——依靠平台来存储东西。这就是为什么它取决于谁将窃取密码的威胁。