JWT刷新令牌

3
用户身份验证的常见流程如下所示:
  1. 用户使用其凭据(用户名/密码)注册并登录
  2. 服务器验证用户的凭据,如果有效,则返回一个访问令牌和刷新令牌
  3. 发送 access token 的进一步请求,并在令牌有效时,服务器响应请求的资源
  4. access token 不再有效时,服务器会要求客户端提供一个 refresh token 以便发放新的 access token
  5. 服务器接收到 refresh token ,可能会发生两件事情:
    • 如果 refresh token 有效,则向客户端发放新的 access token
    • 如果无效,则服务器要求用户进行身份验证
为了使客户端能够在每个请求中发送 access token ,该令牌应存储在浏览器存储器(本地/会话存储)或 cookie 上,这使其容易受到 XSS(跨站脚本)攻击。如果我们将 access token 的寿命设置短一些,可以减轻此问题。
然而,我的问题是关于 refresh token 的。该令牌应具有较长的生命周期,并且由于我们使用它获取新的 access tokens ,如果攻击者截取了该令牌,这将是一个问题。因此,在客户端存储此令牌可能不是个好主意,对吧?
但是,有什么替代方案吗?
我们可以将其存储在设置了 "httpOnly" 标志的 cookie 中吗?但这是否会使其容易受到 CSRF(跨站请求伪造)攻击?
加密令牌并仍然将其保存在浏览器存储器中是否安全?
提前感谢您的回答。最好的问候!
1个回答

2

这就使它容易受到XSS(跨站脚本)攻击。

需要澄清的是,只有在您的网站存在漏洞并可能导致此类攻击时,cookie 才容易受到 XSS 攻击。

我们能把它存储在设置了“httpOnly”标志的 cookie 中吗?但这难道不会让它容易受到 CSRF(跨站请求伪造)攻击吗?

尽管由于需要在客户端访问,“httpOnly”标志不能用于某些形式的 CSRF 保护,但将 cookie 标记为“httpOnly”并不会以任何方式增加系统风险 -“httpOnly”更具限制性。

加密令牌并在浏览器存储中保存是安全的吗?

不完全是因为任何可以访问浏览器存储的人或任何东西都可以访问 cookie 值并呈现它。无论其形式如何-加密或未加密-如果它可以直接使用而不需要外部密钥,则无关紧要。不必太担心这个问题-相信浏览器能够保持安全,但确保您网站的其他部分尽可能安全。

您是正确的,刷新令牌被视为比访问令牌更敏感。您可以将其存储在 cookie 中,但请确保它设置为“httpOnly”,并设置“secure”标志以确保仅通过加密的 HTTPS 连接传输。


首先,非常感谢您的回复;) 关于您提出的第一个观点,我的意思是将令牌存储在cookie中会使其容易受到XSS攻击,因为客户端必须访问此cookie(以获取令牌并在授权标头中使用它),因此“httpOnly”标志(允许防止XSS)将不会设置。这不对吗? - user3673649
关于你的第二点,我不确定我是否理解了。你能再解释一下吗?谢谢 ;) - user3673649
是的,第一条评论是正确的。我只是重新表述一下,说cookie“可能被劫持,如果我的网站容易受到XSS攻击”。请参阅此OWASP文章以获得有关CSRF的良好解释。我的意思是拥有httpOnly cookie并不会使您容易受到CSRF攻击。 - SilverlightFox
我明白了,谢谢! - user3673649

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接