【问题标题】:Django rest auth store token securelyDjango rest auth 安全地存储令牌
【发布时间】:2021-05-02 20:06:59
【问题描述】:

我正在尝试在后端使用 django-rest-auth 库实现身份验证,并且我正在对前端使用 react。 Django-rest-auth 在认证后返回一个令牌,我在猜测如何处理它。

  • 从安全角度来看,该令牌可以保存在 HTTPOnly cookie 中还是应该只保存在内存中?

  • 是否存在经过测试的方法来使用 django-rest-auth 实现本地持久性并在不实施网站漏洞的情况下做出反应?

【问题讨论】:

  • 嗨,安德里亚。您是否从一个端点提供前端代码,然后从 Django rest api 浏览器端获取动态数据,并希望在后续重新加载时不重新授权?
  • 实际上,我使用 build 文件夹直接在 Django 中为前端提供服务。是的,我不想在后续重新加载时重新授权,因为它会破坏我的用户体验
  • 您是否意识到,您的方法无法在您的网站上进行任何 SEO 并使其对爬虫不可见?我很抱歉这个问题,我问是因为我自己遇到了这种情况;)
  • 是的,他们说在 LocalStorage 中持久化很危险,但在几乎所有教程中,他们确实使用它来持久化令牌。
  • 我强烈建议您使用 GraphQL 而不是 REST。这是惊人的经历。特别是前面的 FormidableURQL 和背面的 Django Graphene。这绝对是很棒的体验。比 REST 更简单的方法

标签: reactjs django security authentication django-rest-auth


【解决方案1】:

在客户端存储令牌的每种方法都有一些弱点:

  • 将令牌存储在 HTTPOnly cookie 中会使应用程序容易受到 CSRF 攻击
  • 将令牌存储在 localStorage 中会使应用程序容易受到 XSS 攻击

我个人使用 localStorage 来存储令牌,因为它很方便。 React 有内置的 XSS 防护,你可以额外开启 CSP(内容安全保护)。我写了一篇关于我的方法的文章:https://saasitive.com/tutorial/react-token-based-authentication-django/ - httpOnly 与 localStorage 的讨论在文章的末尾。还有完整的教程如何使用 Django 和 React (link) 启动 SaaS 应用程序。

【讨论】:

  • 对于 CSRF 攻击,我正在考虑同时设置 CSRF 令牌和 CORS 策略以避免它被利用。但是,我认为本地存储是最糟糕的选择。
猜你喜欢
  • 2017-08-15
  • 2012-09-11
  • 2019-04-11
  • 2019-01-28
  • 2019-02-20
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多