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

时间:2018-08-11 13:12:01

标签: django reactjs authentication django-rest-framework

尽管有很多关于此主题(或密切相关)的帖子,但我没有找到我想要的东西。

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

现在,我实现了令牌身份验证,并且功能完善。唯一的问题是令牌以React的状态存储,如果用户刷新页面,则他将不再登录(令牌丢失)。

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

我的问题:

我是否需要使用会话身份验证来使用户保持登录状态,即使React的状态发生变化也是如此。还是我也可以通过令牌认证(以安全负责的方式)实现同一目标?

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

编辑:

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

1 个答案:

答案 0 :(得分:0)

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. Ask HN: Cookies vs. JWT vs. 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/