Django Rest Framework + React - 令牌与会话身份验证

Rik*_*eek 9 authentication django django-rest-framework reactjs

虽然在 SO 上有很多关于这个主题(或密切相关)的帖子,但我没有找到我要找的东西。

正如标题所示,我使用 Django Rest Framework 作为后端,使用 React 作为前端。

现在我实现了令牌认证,它完美地工作。唯一的问题是token是保存在React的状态中的,如果用户刷新页面,他就不再登录了(token丢失了)。

所以,现在我想切换到会话身份验证,因为问题解决了。但这需要我做一些研究,在我去那里之前,我想知道这是否是最佳选择。

我的问题:

我是否需要使用会话身份验证来让用户保持登录状态,即使 React 的状态发生变化。或者我也可以通过令牌认证来实现同样的事情(以安全和负责任的方式?)

我想我可以将令牌保存在 cookie 中,但这对我来说似乎并不安全。

编辑:

后来我意识到,为什么不将令牌存储在会话中?

Har*_*eno 7

SessionAuthentication将是实现您想要的最直接的方法。该配置在http://www.django-rest-framework.org/api-guide/authentication/#setting-the-authentication-scheme 中描述这将在浏览器处理的 cookie 中设置会话 ID。

或者,您可以在浏览器的 cookie 中存储一个令牌,但它容易受到 XSS 攻击和其他 javascript 攻击。为了提高安全性,您可以将令牌存储在HttpOnly cookie 中。cookie 将在浏览器关闭的选项卡/窗口中保留。

还要澄清 cookie 处理内置于大多数浏览器中。您的反应状态在用户空间中,并且与 cookie 存储位于不同的内存空间中。

更多信息:

  1. 问 HN:Cookie 与 JWT 与 OAuth
  2. https://developer.okta.com/blog/2017/08/17/why-jwts-suck-as-session-tokens
  3. http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/