如何在使用 httpOnly cookie 时保护 SPA 中的私有路由

How to secure private routes in SPA while using httpOnly cookies

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

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

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

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

Am I forced to use non-httpOnly cookies or localStorage for this?

没有。将您的 access_token 保存在带有 httpOnly 标志的 cookie 中,并且(如果可能)带有 secure 标志。 我们称这个 cookie session_cookie.

当用户成功登录时,您可以 return 2 个 cookie:session_cookie 和另一个通知 JS 用户已通过身份验证的 cookie(我们称之为 SPA cookie) .

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

您的 SPA cookie 没有 httpOnly 标志,因此 JS 可以访问它,但服务器不使用它来验证用户身份,因此伪造此 cookie 毫无用处。

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