authentication - 如何在使用 httpOnly cookie 时保护 SPA 中的私有路由
问题描述
我想使用 JWT 身份验证来保护我的 SPA 私有路由。为了使一切尽可能安全,我想使用httpOnly
cookie 将我的存储access_token
在客户端。
使用httpOnly
cookie 可以很好地保护我免受 XSS 攻击,但不幸的是,这种方法不允许我检查 cookie 是否真的存在于浏览器中。
在这种情况下 - 我如何实现一些逻辑来防止未登录的用户访问我的 SPA 的私有、安全路由?
我是被迫使用非httpOnly
cookie 还是localStorage
为此?
解决方案
我是否被迫为此使用非 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
.
推荐阅读
- java - Spring RestController 不显示 html 页面,仅显示文本
- azure - 我应该在生产环境中使用 Azure AD SAML 工具包吗?
- sas - 是否有一种简单的方法可以在 SAS 中复制存储过程?
- c++ - 使我的函数调用 async_read 异步 Boost::asio
- react-native - 多个过滤器/过滤器内过滤器 - React Native
- c - 是否有可以指示任何类型更改的 GCC 警告?
- ionic-framework - 如何在 ionic app 中实现内网推送通知
- javascript - useReducer 未同步更新项目数组,渲染延迟
- python - 获得最大高度函数的名称错误
- javascript - 数据结构 - 算法脚本