尽管在SO上有很多关于这个主题(或密切相关(的帖子,但我没有找到我要找的东西。
正如标题所暗示的那样,我正在使用Django Rest Framework作为后端,而React作为前端。
现在我实现了令牌身份验证,它的工作原理很好。唯一的问题是令牌存储在 React 的状态中,如果用户刷新页面,他将不再登录(令牌丢失(。
所以,现在我想切换到会话身份验证,因为问题已经解决了。但这需要我做一些研究,在我去那里之前,我想知道这是否是最好的选择。
我的问题:
我是否需要使用会话身份验证来让用户保持登录状态,即使 React 的状态发生变化也是如此。或者我也可以通过令牌身份验证实现同样的事情(以安全和负责任的方式?
我想我可以将令牌保存在 cookie 中,但这对我来说似乎并不安全。
编辑:
后来我意识到,为什么不直接将令牌存储在会话中?
SessionAuthentication
将是实现您想要的最直接的方法。配置在 http://www.django-rest-framework.org/api-guide/authentication/#setting-the-authentication-scheme 中描述 这将在浏览器处理的 cookie 中设置会话 ID。
或者,您可以将令牌存储在浏览器的cookie中,但该令牌容易受到XSS攻击和其他JavaScript攻击。为了提高安全性,您可以将令牌存储在 HttpOnly cookie 中。Cookie 将在浏览器关闭的选项卡/窗口后保留。
此外,为了澄清大多数浏览器中都内置了cookie处理。您的反应状态位于用户空间中,并且位于与 cookie 存储不同的内存空间中。
更多信息:
- 询问 HN:Cookie 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/