Cookies 将JWT令牌存储在非HttpOnly Cookie中,以支持多制表符并结合指纹识别

Cookies 将JWT令牌存储在非HttpOnly Cookie中,以支持多制表符并结合指纹识别,cookies,oauth-2.0,jwt,spring-security-oauth2,spring-oauth2,Cookies,Oauth 2.0,Jwt,Spring Security Oauth2,Spring Oauth2,我读了一本关于保护基于JWT的服务的书。在本指南中,它告诉我们如何在客户端处理JWT令牌 由浏览器自动发送(Cookie存储)。 即使重新启动浏览器也会检索(使用浏览器 本地存储容器) 在XSS问题时检索(存储在浏览器本地/会话存储中的JavaScript代码或令牌可访问Cookie) 如何预防 使用浏览器会话存储容器存储令牌。添加它 作为承载HTTP身份验证头,在调用时使用JavaScript 服务 将指纹信息添加到令牌。通过存储 浏览器会话存储容器中的令牌它将令牌公开给 在XSS攻击中被偷

我读了一本关于保护基于JWT的服务的书。在本指南中,它告诉我们如何在客户端处理JWT令牌

由浏览器自动发送(Cookie存储)。

  • 即使重新启动浏览器也会检索(使用浏览器 本地存储容器)
  • 在XSS问题时检索(存储在浏览器本地/会话存储中的JavaScript代码或令牌可访问Cookie)
  • 如何预防

  • 使用浏览器会话存储容器存储令牌。添加它
    作为承载HTTP身份验证头,在调用时使用JavaScript 服务

  • 将指纹信息添加到令牌。通过存储 浏览器会话存储容器中的令牌它将令牌公开给
    在XSS攻击中被偷。但是,指纹添加到
    该令牌可防止攻击者在其主机上重复使用被盗令牌 机器。关闭一个
    的最大利用曲面数 攻击者,请添加浏览器内容安全策略,以强化
    执行上下文

  • OWASP提供的解决方案限制

    问题是,如果用户在同一浏览器的另一个选项卡中输入相同的URL,则不应向他显示登录页面,而应将其定向到主屏幕,而无需任何登录过程。解决这个问题。我遵循了以下方法。顺便说一句,我使用刷新令牌来支持滑动会话

  • 用户输入登录用户名和密码
  • 验证登录凭据后,将存储访问令牌 在非httponly、安全的samesite cookie中,刷新令牌为 存储在安全的、相同的、仅httponly的cookie中
  • 指纹值是通过不同用户的组合添加的 嵌入令牌信息的上下文。这个指纹饼干 值还存储在安全、samesite、httponly cookie和it中 更改提供给客户端的每个新访问令牌
  • 指纹值用于防止令牌盗用。即使 访问令牌从cookie中被盗。攻击者不会被攻击 由于指纹信息丢失,因此无法使用它
  • 每次请求时,浏览器客户端都需要发送访问权限 通过获取访问令牌,将令牌作为标头中的承载令牌 存在于cookie中。这既是CSRF预防机制,也是用户身份验证机制
  • 如果令牌过期,浏览器将调用刷新令牌URL 由于刷新令牌cookie已经存在,服务器 将自动拾取刷新令牌并提供新的访问令牌 和刷新令牌。第二步再次发生
  • 那么,这种方法安全可靠吗?由于采取了反劫持措施。我是否应该担心将访问令牌存储在非httponly cookie中

    注意:我没有将访问令牌和刷新令牌都存储在内存javascript变量中的原因是,这些令牌需要在托管在同一域上的多个应用程序之间共享。