【问题标题】:Session Management problem with http-only cookies Node.js,React仅 http cookie Node.js,React 的会话管理问题
【发布时间】:2021-04-15 12:01:48
【问题描述】:

我只是对会话管理感到困惑。对于会话管理,目前我使用仅限 http 的 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');

【问题讨论】:

    标签: node.js reactjs express session session-cookies


    【解决方案1】:

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

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

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

    这个想法是这样运作的:

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

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

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

    【讨论】:

    • 感谢您的回答。但是有没有我错过的部分?您称为刷新令牌的 http 唯一 cookie 无法在 safari 等某些浏览器中设置,而无需更改设置或某些用户只是关闭 cookie。即使在注销过程中,有时您也无法将其从内存中删除。
    • 你确定你说的是同一个域的cookie吗?因为如果它不起作用,它基本上会破坏互联网:]
    • 你说得对,这是我无法理解的观点之一,但是根据您在上面看到的代码,cookie 没有在手机或某些浏览器(如 safari)中设置:D
    • 我找到了如果开启了阻止跨站跟踪设置,我的登录过程有问题。
    • 顾名思义,跨站点跟踪意味着您试图从不同的域中放置/使用cookie,“域”包括子域和端口。它基本上是为了阻止谷歌分析和此类工具而创建的
    猜你喜欢
    • 2012-02-09
    • 2014-08-05
    • 2012-05-09
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多