基于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的作用也存在疑问。
具体问题:
- CSRF仅在使用Cookie时才需要,这种说法是否正确?
- 若该说法正确,能否让SPA不通过Cookie存储JWT令牌,同时仍能跨浏览器会话和页面刷新安全保持登录状态?
- 若不能,如何在支持两类客户端的同时防范CSRF攻击?
- 若SPA必须使用CSRF令牌,该如何存储CSRF Cookie?是否需要设置
same-origin、httpOnly、secure=true? - 如何在DRF中实现CSRF防护?官方文档提及SessionAuthentication但描述模糊,且默认实现不适用于登录视图。
- CORS在此场景中的作用是什么?能否用它解决现有问题?
补充思考:
我考虑子类化CSRF中间件,当请求存在Authorization头时绕过CSRF校验(判定为移动端客户端),这种方案是否可行?若可行,登录视图该如何设计?因为登录时客户端都还没有Authorization头,仍需CSRF防护。
内容的提问来源于stack exchange,提问作者Slav
相关产品推荐
相关产品推荐

