我正在跟踪分布式/无服务器应用程序的 Gun/SEA 身份验证系统。当 Gun 用户经过身份验证时,此应用程序会将会话信息保存到本地存储。我遇到的一个问题是,当刷新页面或打开新选项卡时,我希望在会话有效时保持用户身份验证,并且由于 XSS 和物理安全原因,我不想将用户名和密码存储在本地存储中。目前这个问题有解决办法吗?我认为 sessionStorage 可能更好,但它仍然存在一些相同的安全问题:将用户名和密码存储在攻击者可能能够获取的地方,并且在打开新选项卡时需要用户登录。
授予 !很高兴收到您的来信,很抱歉回复延迟(我不确定评论的人是谁,因为这对您的情况没有真正帮助)。
这是一个很好的问题,您已经在某种程度上触及了安全性和浏览器技术的局限性 - 老实说,它们都不是很好。我们来复习:
user.recall({sessionStorage: true})它,它将尝试自动重新登录。但您是对的,存在一些安全权衡,但我认为这是合理的。localStorage。我听到一些人抱怨不同的浏览器处理 sessionStorage 的效果很差(不保留在新选项卡等中),所以下一个选择是使用 localStorage。但是,我确实认为这是一个实际的安全问题。IndexedDB。事实证明,WebCrypto API 确实有一个导入密钥的选项,并将在 IndexedDB 中对它们进行加密,并在以后检索它们,而不会将其传递到用户空间 - 至少,这是我所听到的。然而,您仍然需要处理最初获取密钥的问题,并且 IndexedDB 支持各不相同,您需要为其编写一个 GUN 插件。同时,您最初的建议可能是最好的 - 使用 (1) sessionStorage。它将与 MetaMask 向前/向后兼容。中期希望您或社区中的其他人能够实现 (5) 工作。然后长期(6 和 7)将是解决方案。
现在,请查看 MetaMask 演示:https://twitter.com/marknadal/status/1062153254283276288
编辑:MetaMask 仍在为此开发他们的 API,同时,您可以使用我们的http://party.lol扩展。