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