Поддержка предотвращения CSRF в приложении django отправляет токены CSRF на клиента через куки-файл и принимает токены CSRF от клиента либо в заголовке (X-CSRFToken), либо в файле cookie. Это отлично подходит для веб-приложений, отличных от CORS, без AJAX. Но, похоже, он не работает, если вы a) имеете одностраничное веб-приложение, которое общается с сервером через AJAX, и б) одностраничный webapp размещен в другом домене, чем сервер (CORS).CORS, Ajax и CSRF
Проблема в том, что одностраничный webapp (from domain1) не может читать файлы cookie домена домена (domain2), используя xhr.getResponseHeader или getCookie из-за ограничений CORS. Как веб-приложение javascript может отправить соответствующий токен CSRF на сервер, учитывая, что он не может читать файлы cookie?
xhr.getResponseHeader api ограничен извлечением заголовков Set-Cookie или Set-Cookie2 (по спецификации), и различные браузеры, поддерживающие CORS, как представляется, применяют это ограничение. Аналогично, функция getCookie JS будет читать все cookie, отличные от httpOnly, в домене webapp (domain1), но не будет читать те, которые установлены сервером в его домене (domain2).
Это не проблема в случаях, отличных от CORS, но в нашем приложении мы хотим разместить API в другом домене, чем клиентский webapp. Какие-либо предложения?
Вы когда-нибудь это разрешили? Похоже, у тебя такая же проблема. – gcdev
Нет, никогда не было разрешено. – eswenson
Grr. ОК. Благодарю. – gcdev