You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于DRF+simple_jwt适配SPA与移动端的JWT安全防护问询

基于DRF+Simple JWT的多客户端认证疑难问题

我正在开发一个基于Django REST Framework(DRF)的REST API应用,计划用simple_jwt实现令牌认证。目前API包含/auth/login/、/auth/refresh/、/protected/endpoint/这些端点。

梳理CSRF相关知识后我得出:只有当使用Cookie时才需要CSRF防护,因此仅SPA客户端需要;JWT令牌存储上,SPA要存入带httpOnly、secure=true、same-origin属性的Cookie,移动端则按应用自身的持久化方式存储。

但这要求API同时对SPA客户端强制CSRF校验、对移动端客户端豁免CSRF校验,这看起来很难实现。我曾考虑拆分两套API,但这样会导致CSRF防护失效。另外我对CORS的作用也存在疑问。

具体问题:

  1. CSRF仅在使用Cookie时才需要,这种说法是否正确?
  2. 若该说法正确,能否让SPA不通过Cookie存储JWT令牌,同时仍能跨浏览器会话和页面刷新安全保持登录状态?
  3. 若不能,如何在支持两类客户端的同时防范CSRF攻击?
  4. 若SPA必须使用CSRF令牌,该如何存储CSRF Cookie?是否需要设置same-origin、httpOnly、secure=true?
  5. 如何在DRF中实现CSRF防护?官方文档提及SessionAuthentication但描述模糊,且默认实现不适用于登录视图。
  6. CORS在此场景中的作用是什么?能否用它解决现有问题?

补充思考:

我考虑子类化CSRF中间件,当请求存在Authorization头时绕过CSRF校验(判定为移动端客户端),这种方案是否可行?若可行,登录视图该如何设计?因为登录时客户端都还没有Authorization头,仍需CSRF防护。


内容的提问来源于stack exchange,提问作者Slav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:02:36