Authentication 对Django REST身份验证、JWT和HTTP cookie感到困惑

Authentication 对Django REST身份验证、JWT和HTTP cookie感到困惑,authentication,django-rest-framework,Authentication,Django Rest Framework,因此,在研究了身份验证/安全性的最佳实践之后,似乎将后端创建的JWT存储在localStorage中是不安全的,因此,应该使用HTTP cookie,某种程度上。问题是simpleJWT包不做cookies。未找到任何其他可以处理此任务的最新包。那我该怎么办?抛弃JWT,使用DRF内置的会话身份验证? 有一种误解认为httpOnlycookies可以防止XSS攻击。这不是真的。如果XSS攻击成功,黑客可以使用httpOnlycookies执行恶意请求 在localStorage和XSS攻击的情况

因此,在研究了身份验证/安全性的最佳实践之后,似乎将后端创建的JWT存储在localStorage中是不安全的,因此,应该使用HTTP cookie,某种程度上。问题是simpleJWT包不做cookies。未找到任何其他可以处理此任务的最新包。那我该怎么办?抛弃JWT,使用DRF内置的会话身份验证?

  • 有一种误解认为
    httpOnly
    cookies可以防止XSS攻击。这不是真的。如果XSS攻击成功,黑客可以使用
    httpOnly
    cookies执行恶意请求
  • localStorage
    和XSS攻击的情况下,黑客可以直接读取身份验证令牌,并将其用于恶意请求
  • 因此,可以对这两种类型执行恶意请求:
    localStorage
    和cookies
    httpOnly
  • 更重要的是,如果使用带有
    httpOnly
    的cookie,则可以从其他来源进行恶意请求(跨站点请求伪造(CSRF))。这种攻击不适用于
    localStorage
localStorage
cookies
的比较来自我的文章:

simplejwt repo中打开了添加Cookie
httpOnly
的问题:

如果可以使用基于会话的DRF,那么应该使用它。这是一个经过战斗考验的解决方案。如果您想使用基于令牌的身份验证,可以将令牌存储在
localStorage
中,它将尽可能安全