我想通过JWT身份验证来保护SPA专用路由。为了使所有内容尽可能地安全,我想使用httpOnly
cookie将{{1}}存储在客户端。
使用access_token
cookie在很大程度上保护了我免受XSS攻击,但是不幸的是,这种方法不允许我检查cookie是否确实存在于浏览器中。
在这种情况下-如何实施一些逻辑以防止未登录的用户访问SPA的私有安全路由?
我是否被迫为此使用非httpOnly
cookie或httpOnly
?
答案 0 :(得分:3)
我是否被迫为此使用非httpOnly cookie或localStorage?
不。使用access_token
标志将httpOnly
保存在cookie中,并使用secure
标志保留(如果可能)。
我们将此Cookie称为session_cookie
。
用户成功登录后,您可以返回2个cookie:session_cookie
和另一个通知JS用户已通过身份验证的cookie(我们将其称为SPA cookie
)。
session_cookie
无法访问您的JS
,因此它不受XSS
的攻击。该Cookie会在每次请求时发送到服务器,服务器会检查该令牌是否有效,否则会返回未经授权的错误。
您的SPA cookie
没有httpOnly
标志,因此JS
可以访问它,但是服务器不使用它来对用户进行身份验证,因此伪造此cookie是没有用的。
只要您在SPA
上收到未经授权的错误,就可以删除SPA cookie
。