繁体   English   中英

Session 仅使用 http 的管理问题 cookies Node.js,React

[英]Session Management problem with http-only cookies Node.js,React

我只是对 session 管理感到困惑。 For session management, currently im using http-only cookies to store my JWT but these cookies cannot be reached by everyone because of browser's cookie settings which I think is bad for the user experience. 因此,当我搜索本地存储等替代方式时。 我了解到您在这些方面不够安全。 你会建议我如何处理我上面提到的问题? 我应该将整个身份验证系统更改为服务器端还是任何想法?

//认证

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');

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

我的建议(我们基于前端客户端处理 JWT 的终极指南)是使用 2 种令牌:

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

这个想法是这样的:

  1. 用户登录,您的服务器验证凭据并使用accessToken生成httpOnly cookie,并返回refreshToken作为响应。
  2. 您的客户端应用程序在某些 class 实例上使用 accessToken(当与Axios使用时,您可以将其作为基本授权 header 附加到所有请求)。
  3. 当您的应用发出请求时,它会将 AccessToken 添加为授权 header,如果 AccessToken 过期,您的 api 将返回 403 UnAuthorized,您的客户端应用使用包含 refreshToken 的 httpOnly cookie 向特殊端点/auth/token发出请求,端点验证 refreshToken,并返回一个过期时间为 10 分钟的新 accessToken(您的客户端应用程序会更新基本 Auth header),然后您的应用程序可以使用新的 accessToken 重试先前失败的请求。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM