首页 > 解决方案 > 如何在使用 httpOnly cookie 时保护 SPA 中的私有路由

问题描述

我想使用 JWT 身份验证来保护我的 SPA 私有路由。为了使一切尽可能安全,我想使用httpOnlycookie 将我的存储access_token在客户端。

使用httpOnlycookie 可以很好地保护我免受 XSS 攻击,但不幸的是,这种方法不允许我检查 cookie 是否真的存在于浏览器中。

在这种情况下 - 我如何实现一些逻辑来防止未登录的用户访问我的 SPA 的私有、安全路由?

我是被迫使用非httpOnlycookie 还是localStorage为此?

标签: authenticationcookieslocal-storagejwthttponly

解决方案


我是否被迫为此使用非 httpOnly cookie 或 localStorage?

不。将您的 cookie 保存access_token在带有httpOnly标志的 cookie 中,并且(如果可能的话)带有secure标志。我们称之为 cookie session_cookie

当用户成功登录时,您可以返回 2 个 cookie:session_cookie另一个通知 JS 用户已通过身份验证(让我们调用 as SPA cookie)。

session_cookie无法访问,JS因此它不易受到XSS. 这个 cookie 会在每次请求时发送到服务器,服务器会检查是否是有效令牌,否则会返回未经授权的错误。

SPA cookie还没有httpOnly标记,所以它可以被访问,JS但服务器不使用它来验证用户,所以伪造这个 cookie 是没用的。

每当您收到未经授权的错误时,您SPA都可以删除SPA cookie.


推荐阅读