JWT刷新令牌

时间:2015-12-01 17:23:02

标签: security cookies token xss csrf

用户身份验证的常见方案遵循以下步骤:

  1. 用户使用其凭据(用户名/密码)注册并登录
  2. 服务器验证用户的凭据,如果有效,则返回access tokenrefresh token
  3. access token将在进一步的请求中发送,如果有效,则服务器以所请求的资源进行响应
  4. access token不再有效时,服务器会请求客户提供refresh token以发布新的access token
  5. 服务器收到refresh token,可能会发生两件事:
    • 如果refresh token有效,则向客户发布新的access token
    • 如果没有,服务器会请求用户进行身份验证
  6. 要让客户能够在每个请求中发送access token,该令牌应存储在浏览器存储(本地/会话存储)或 Cookie ,这使得它易受XSS(跨站点脚本)攻击。如果我们将短生命周期设置为access token,则可以减轻此问题。

    然而,我的问题是关于refresh token。此令牌应该具有较长的生命周期,并且由于我们使用它来获取新的access tokens,如果攻击者拦截它将是一个问题。因此,在客户端存储此令牌可能不是一个好主意,对吧?

    但是,有哪些替代方案?

    我们可以将它存储在使用" httpOnly"旗?但这不会使它容易受到CSRF(跨站点请求伪造)攻击吗?

    加密令牌并将其保存在浏览器存储上是否安全?

    提前谢谢你。最好的问候!

1 个答案:

答案 0 :(得分:0)

  

使其易受XSS(跨站点脚本)攻击。

为了澄清,如果您的网站上存在可能导致此问题的漏洞,则该Cookie仅容易受到XSS攻击。

  

我们可以将它存储在使用" httpOnly"旗?但不会   这使它容易受到CSRF(跨站点请求伪造)攻击?

虽然httpOnly标志由于需要在客户端访问而无法在某些形式的CSRF protection中使用,但将Cookie标记为httpOnly并不会增加风险以任何方式对您的系统 - httpOnly更具限制性。

  

加密令牌并将其保存在浏览器存储上是否安全?

不是因为任何可以访问浏览器存储的人都可以访问cookie值并显示它。如果它可以在没有外部密钥的情况下直接使用,那么它采用何种形式(加密或不加密)并不重要。不要太担心这一点 - 请相信浏览器以保证安全,但要确保网站的其余部分尽可能安全。

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