【发布时间】:2016-05-25 19:58:10
【问题描述】:
我有一个 Django 应用程序,主要在 domain.com 下提供服务,但也在其他域下提供服务(主要用于测试)。我还有一个单独的子域,为用户提供 Web 应用程序客户端代码。
API 的主域是api.domain.com,应用程序正在部署到apps.domain.com。暂存服务器不在同一个域名下;他们住在stagingX.otherdomain.com。这是我无法控制的。
我遇到的问题是当我尝试从 apps.domain.com 登录时遇到 CSRF 失败:
Failed to load resource: the server responded with a status of 403 (OK)
login error: "CSRF Failed: Referer checking failed - http://apps.domain.com/ does not match https://api.domain.com/."
这是一个简单的世界,我只需将 CSRF_COOKIE_DOMAIN 设置为 *.domain.com 即可。但是,这完全破坏了我在部署之前暂存代码的能力,因为直接访问 stagingX.otherdomain.com 的 API 也需要针对需要运行的不同测试工作。
谁能告诉我我应该如何设置它?我后悔决定将应用程序部署到单独的服务器的那一天,但由于其他原因,应用程序部署和 API 部署应该分开......这让我发疯了。
提前致谢。
-- 已编辑以添加其他信息--
为了它的价值,我也在使用 CORS 保护。在这种情况下,看起来也许我应该使用某种 CORS 标头而不是 CSRF,但我对 CORS 机制的理解不够充分,无法理解这是否是解决方案所在。我确实将apps.domain.com 列入了白名单,但这不适用于登录,可能也不适用于其他端点(无法通过登录来检查其他端点)。
【问题讨论】:
-
在短期内,我已经设置了基于令牌的身份验证和 CSRF 豁免登录端点,这似乎有效但并不理想。
标签: django csrf-protection django-csrf