reactjs - 存储会话密钥的标准
问题描述
在对该主题进行了一些研究之后,似乎会话密钥通常被存储为 cookie,这很好,因为它们会自动添加到请求中。不过,由于限制较少,我一直看到开发人员更喜欢本地存储而不是 cookie。我正在构建一个 React 前端,因此在本地存储中持久化一个减速器并在该减速器中管理会话密钥将非常容易。我需要将此附加到请求中,这似乎是唯一的缺点。想知道是否有一个标准来说明如何做到这一点。先感谢您!
解决方案
您可以在浏览器中存储密钥的地方只有几个:
- 会话存储/本地存储
- 饼干
- 网络工作者
- 在记忆中
饼干
只要 Cookie 具有正确的配置/属性,Cookie 就是放置敏感密钥的最佳位置之一。这包括 , , ,httpOnly
并secure
确保它们在合理的时间内过期。更多阅读here了解如何正确设置这些属性。SameSite
Domain
Cookie 非常好用,因为它们与 HTTPS 一样安全,并且无法通过 javascript 访问(如果设置了正确的属性,即 httpOnly)。但请注意,您仍然需要注意诸如 CSRF 攻击之类的漏洞,并且您必须包含一个 CSRF 令牌来应对此漏洞,因为 cookie 会由浏览器自动添加到标头中。
本地存储/会话存储
LocalStorage 和会话存储是保存密钥的糟糕地方,因为它们可以通过 javascript 访问。您可以在此处查看 Auth0 建议如何存储密钥,并注意出于上述原因,他们劝说不要将其存储在 localStorage 中。
在记忆中
您可以将密钥存储在 javascript 内存中(使用闭包来封装您的密钥)。这有一个缺点,因为在刷新/关闭/新标签等之后密钥不会保留,但仍然非常安全
网络工作者
Web Workers是另一个可以存储密钥的地方。Worker 与应用程序的其余部分在一个单独的全局范围内运行,因此它使它们非常安全,并且您可以对将其密钥发送到哪些 api 进行精细控制。
Auth 可能很棘手,而且很容易忘记包含一些重要的内容,因此请确保您充分了解所有属性以及每个部分的工作原理。或者使用 Auth0 或单唱等预制选项。
推荐阅读
- vba - 使用子文件夹名称自动分类电子邮件
- google-sheets-api - 使用 gspread 对谷歌电子表格的读取请求出现错误 500
- rust - 是 Vec 中的数据吗
总是密密麻麻? - javascript - 尝试替换构造函数变量时出错
- java - 从kafka主题读取时如何验证无效的分区名称
- php - Twig - 带有 3 个操作数的“for”语法,这是什么意思
- android - 有什么方法可以检测 Android TV Leanback 中键盘的可见性
- ios - WKWebView canGoForward 总是返回 false swift 5
- php - WooCommerce 仅显示可变产品的价格?
- javascript - 通过 javascript 进行表单验证