React SPA with Express Backend API - 将 JWT 存储在本地存储中并限制 API 仅访问 SPA 的 Web 服务器 IP

Posted

技术标签:

【中文标题】React SPA with Express Backend API - 将 JWT 存储在本地存储中并限制 API 仅访问 SPA 的 Web 服务器 IP【英文标题】:React SPA with Express Backend API - Storing JWT in localstorage and limiting API access to SPA's web server IP only 【发布时间】:2021-02-15 20:41:12 【问题描述】:

我正在处理一个项目,该项目涉及使用 React 构建的 SPA Web 应用程序,连接到运行 Express 的 API。

我已经阅读了很多关于 *** 的文章和问题。 (特别是这个link 有一个非常详细的答案)。但是,有一点我无法理解。我搜索了问题,找不到任何包含后端 API 端 IP 限制的答案。

我想将 JWT 发送给从 SPA 登录的授权用户,并将 JWT 存储在客户端的本地存储中。后端 API 只能从 SPA 的 IP 地址访问,并且将对任何其他 IP 关闭。 CORS 也将配置为仅与 SPA 域名一起使用。

那么考虑到这种配置,将 JWT 存储在本地存储中是否仍然不安全?由于 API 仍然只能被一个 IP 访问,攻击者通过 XSS 攻击获取访问 Token 后如何使用它?

【问题讨论】:

【参考方案1】:

为了访问服务器,可以应用多种攻击:

    Ip spoofing s-s-rF ip验证漏洞,想想你需要检查ip,ip有多种形式,ipv4、ipv6、hex、oct等... 防火墙/反向代理攻击

最佳实践旨在避免错误,请遵循它们。

顺便说一句,我总是推荐 this article 来理解 JTW 身份验证。 (我在阅读后更改了我的应用程序实现 :))

【讨论】:

感谢费利克斯的详细解答。那么,你是否选择了带有 httponly cookie 的访问令牌/刷新令牌方法? 是的,想想看,它具有所有要求的好处。静默访问令牌刷新,xss 无法利用(不存储在 localStorage 中),访问令牌寿命短。 感谢您的澄清。但是,在这种情况下,由于我们将使用 cookie,我们需要为后端实现某种 CSRF 保护,对吧? 由于只有一个端点实际上在 cookie 上进行中继(刷新令牌端点),因此您可以将其设为 post 请求并限制 cookie 仅在此路径上注册。 非常感谢@felixmosh

以上是关于React SPA with Express Backend API - 将 JWT 存储在本地存储中并限制 API 仅访问 SPA 的 Web 服务器 IP的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: undefined is not a function with React 和 Express

我必须在 React SPA 中使用 csrf 保护吗?

使用 Express 实现一个简单的 SPA 静态资源服务器

关于使用express作为spa应用服务的问题

我在这里做错了吗 node+express + vue SPA getCSRFTOKEN()

如何创建服务于 Vue.js SPA 的 Node.js Express 应用程序?