У меня есть приложение Django, которое работает под доменом в основном, но и под другими доменами (в основном для тестирования). У меня также есть отдельный субдомен, который обслуживает клиентский код веб-приложения для пользователей.CSRF не работает с несколькими доменами (не поддоменами), обслуживаемыми приложением Django
Основным доменом для API является api.domain.com
, а приложения развернуты до apps.domain.com
. Промежуточные серверы не находятся под одним и тем же доменным именем; они живут на stagingX.otherdomain.com
. Это вне моего контроля.
Проблема, которую я имею, что я получаю отказы CSRF, когда я пытаюсь войти в систему из apps.domain.com
:
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
и сделать. Однако это полностью разрушает мою способность выполнять код перед развертыванием, потому что прямой доступ к API на stagingX.otherdomain.com
также должен работать для различных тестов, которые необходимо запустить.
Может ли кто-нибудь просветить меня о том, как именно я должен это настроить? Я ругаю день, когда решил развернуть приложения на отдельный сервер, но развертывание приложений и развертывание API следует разделить по другим причинам ... это просто заводит меня в орехи.
Заранее спасибо.
- EDITED добавить дополнительную информацию -
Для чего это стоит, я использую защиту CORS, а также. Похоже, что в этом случае я должен использовать какой-то заголовок CORS, а не CSRF, но я не полностью понимаю механизм CORS, чтобы понять, есть ли это решение. У меня есть apps.domain.com
whitelisted, но это не работает при входе в систему и, возможно, на других конечных точках (не может пройти мимо входа, чтобы проверить остальные).
В краткосрочной перспективе я установил аутентификацию на основе токенов и CSRF-освободил конечную точку входа, похоже, работает, но это не идеально. – seawolf