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

Posted

技术标签:

【中文标题】Django Rest Framework + React - 令牌与会话身份验证【英文标题】:Django Rest Framework + React - token vs session authentication 【发布时间】:2019-01-18 20:49:00 【问题描述】:

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

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

现在我实现了令牌身份验证,它运行良好。唯一的问题是token存储在React的状态中,如果用户刷新页面,他就不再登录了(token丢失了)。

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

我的问题:

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

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

编辑:

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

【问题讨论】:

【参考方案1】:

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

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

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

更多信息:

    Ask HN: Cookies vs. JWT vs. OAuth https://developer.okta.com/blog/2017/08/17/why-jwts-suck-as-session-tokens http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/

【讨论】:

以上是关于Django Rest Framework + React - 令牌与会话身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Django中rest_framework的APIView,序列化组件和视图组件

在 django-rest-framework 中插入 django-allauth 作为端点

Django中rest_framework的认证组件,权限组件,频率组件,序列化组件的最简化版接口

Django Rest Framework 反向和 SimpleRouter

Django Rest Framework组件:解析器JSONParserFormParserMultiPartParserFileUploadParser

根据请求类型更改 Django REST Framework ModelSerializer 中的字段?