我只是对会话管理感到困惑。对于会话管理,目前我只使用http-only cookie来存储我的JWT,但由于浏览器的cookie设置,这些cookie并不是每个人都能访问到的,我认为这对用户体验不好。所以当我搜索像本地存储这样的替代方法时。我了解到你在这些方面不够安全。你建议我如何处理我上面提到的问题?我应该将整个身份验证系统改为服务器端还是任何想法?
//鉴权
res.cookie('token', token, {
httpOnly: true,
secure: true,
sameSite: 'None',
maxAge: 7 * 24 * 6 * 604800,
});//注销
res.cookie('token', '', {
httpOnly: true,
secure: true,
sameSite: 'None',
maxAge: 1,
});
res.clearCookie('token');发布于 2021-01-10 17:46:09
您应该使用xss来阻止来自JS的访问,(使用httpOnly attach,您可以在其他用户会话上执行JS )。
我的建议(我们基于The Ultimate Guide to handling JWTs on frontend clients)是使用两种标记:
httpOnly cookie上,仅用于更新accessToken,其有效期较长(建议不超过1天)这个想法是这样工作的:
refreshToken生成httpOnly cookie并作为响应返回accessToken.refreshToken(当与Axios一起使用时,您可以将其作为基本授权标头附加到您的应用程序发出请求的所有requests)./auth/token发出请求,其中httpOnly cookie包含refreshToken,此端点验证refreshToken。并返回过期时间为10mins的新accessToken.(您的客户端应用程序使用该accessToken更新基本Auth标头),然后您的应用程序可以使用新的Auth重试先前失败的请求
使用此方法,不能从应用程序外部访问任何类型的令牌。你的js根本无法访问refreshToken,accessToken保存在内存中,只有当你的应用程序有一些缺陷时,它才会暴露出来,即使攻击者偷走了它,它的有效期也只有10分钟(因为它没有refreshToken,所以无法获得新的)
有关更多详细信息,请阅读我添加的文章。
https://stackoverflow.com/questions/65651706
复制相似问题