我使用基于JWT的身份验证构建具有服务器端呈现功能的SPA应用。
目前的实施是:
Comparable
) - 这样做的目的是避免在完全刷新或关闭页面后再次登录HttpOnly
标头附加到每个API请求由于服务器端呈现,我无法在LocalStorage中存储令牌,也没有Authorization
,因为我需要访问cookie才能构建HttpOnly
标头。
在这种架构中窃取令牌有什么可能性?
答案 0 :(得分:0)
一个主要风险是,您的应用程序中的任何单个跨站点脚本漏洞都可能被用于从cookie中窃取令牌,因为它不是httpOnly(虽然我理解为什么会这样)。像SPA这样的javascript应用程序中的XSS很常见,很难避免。
此外,您还说令牌保留在Cookie中,以便在关闭浏览器后,用户仍然登录。一方面,这是不好的做法,用户关闭浏览器可能期待退出。另一方面,这意味着cookie被持久化到磁盘,因此攻击者更容易从客户端窃取它。
我想到的另一件事是跨站点请求伪造(CSRF),但如果我理解正确,则身份验证实际上基于Authorize
标头,其中令牌在每个请求中被复制。如果是这种情况,CSRF对您来说不是问题(但如果在cookie中发送令牌就足够了)。
所以至少,我认为你应该
不使用持久性Cookie作为令牌
尽量减少XSS的可能性(例如,通过自动扫描您的代码,但这绝不会是100%,也可以通过默认技术谨慎选择安全技术)
确保身份验证基于Authorize
标头而不是Cookie
仍然主要是因为XSS风险,我可能不建议在安全关键应用程序中这样做。