JWT存储在cookie中 - 安全问题

时间:2016-11-13 14:37:52

标签: rest security cookies jwt single-page-application

我使用基于JWT的身份验证构建具有服务器端呈现功能的SPA应用。

目前的实施是:

  • 在成功进行用户名和密码验证后,会发出JWT令牌并将其转移到客户端
  • 令牌然后存储在cookie中(不是Comparable) - 这样做的目的是避免在完全刷新或关闭页面后再次登录
  • 使用令牌
  • 注销已删除的Cookie 如果令牌存在,则
  • HttpOnly标头附加到每个API请求
  • 完整的SSL流量

由于服务器端呈现,我无法在LocalStorage中存储令牌,也没有Authorization,因为我需要访问cookie才能构建HttpOnly标头。

在这种架构中窃取令牌有什么可能性?

1 个答案:

答案 0 :(得分:0)

一个主要风险是,您的应用程序中的任何单个跨站点脚本漏洞都可能被用于从cookie中窃取令牌,因为它不是httpOnly(虽然我理解为什么会这样)。像SPA这样的javascript应用程序中的XSS很常见,很难避免。

此外,您还说令牌保留在Cookie中,以便在关闭浏览器后,用户仍然登录。一方面,这是不好的做法,用户关闭浏览器可能期待退出。另一方面,这意味着cookie被持久化到磁盘,因此攻击者更容易从客户端窃取它。

我想到的另一件事是跨站点请求伪造(CSRF),但如果我理解正确,则身份验证实际上基于Authorize标头,其中令牌在每个请求中被复制。如果是这种情况,CSRF对您来说不是问题(但如果在cookie中发送令牌就足够了)。

所以至少,我认为你应该

  • 不使用持久性Cookie作为令牌

  • 尽量减少XSS的可能性(例如,通过自动扫描您的代码,但这绝不会是100%,也可以通过默认技术谨慎选择安全技术)

  • 确保身份验证基于Authorize标头而不是Cookie

仍然主要是因为XSS风险,我可能不建议在安全关键应用程序中这样做。