首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅使用http cookies Node.js的会话管理问题,React

仅使用http cookies Node.js的会话管理问题,React
EN

Stack Overflow用户
提问于 2021-01-10 17:18:52
回答 1查看 591关注 0票数 1

我只是对会话管理感到困惑。对于会话管理,目前我只使用http-only cookie来存储我的JWT,但由于浏览器的cookie设置,这些cookie并不是每个人都能访问到的,我认为这对用户体验不好。所以当我搜索像本地存储这样的替代方法时。我了解到你在这些方面不够安全。你建议我如何处理我上面提到的问题?我应该将整个身份验证系统改为服务器端还是任何想法?

//鉴权

代码语言:javascript
复制
res.cookie('token', token, {
  httpOnly: true,
  secure: true,
  sameSite: 'None',
  maxAge: 7 * 24 * 6 * 604800,
});

//注销

代码语言:javascript
复制
res.cookie('token', '', {
  httpOnly: true,
  secure: true,
  sameSite: 'None',
  maxAge: 1,
});
res.clearCookie('token');
EN

回答 1

Stack Overflow用户

发布于 2021-01-10 17:46:09

您应该使用xss来阻止来自JS的访问,(使用httpOnly attach,您可以在其他用户会话上执行JS )。

我的建议(我们基于The Ultimate Guide to handling JWTs on frontend clients)是使用两种标记:

  1. 刷新令牌-存储在httpOnly cookie上,仅用于更新accessToken,其有效期较长(建议不超过1天)
  2. 访问令牌-存储在内存中,附加到每个需要身份验证的请求。短期有效(10分钟)。

这个想法是这样工作的:

  1. 用户登录,您的服务器验证凭据并使用refreshToken生成httpOnly cookie并作为响应返回accessToken.
  2. Your客户端应用程序在某些类实例上some refreshToken(当与Axios一起使用时,您可以将其作为基本授权标头附加到您的应用程序发出请求的所有requests).
  3. When,它添加accessToken作为授权标头,如果AccessToken过期,您的应用程序将返回403 UnAuthorized,您的客户端应用程序向特殊端点/auth/token发出请求,其中httpOnly cookie包含refreshToken,此端点验证refreshToken。并返回过期时间为10mins的新accessToken.

(您的客户端应用程序使用该accessToken更新基本Auth标头),然后您的应用程序可以使用新的Auth重试先前失败的请求

使用此方法,不能从应用程序外部访问任何类型的令牌。你的js根本无法访问refreshToken,accessToken保存在内存中,只有当你的应用程序有一些缺陷时,它才会暴露出来,即使攻击者偷走了它,它的有效期也只有10分钟(因为它没有refreshToken,所以无法获得新的)

有关更多详细信息,请阅读我添加的文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65651706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档