Заголовок Set-Cookie не устанавливается при возврате с сайта Cross-Origin в HAProxy - PullRequest
0 голосов
/ 09 октября 2018

У нас есть эта проблема в течение недели - у нас есть настройка балансировки нагрузки nginx / haproxy в передней части нашего стека.Nginx отправляет все запросы haproxy, который затем связывает их и отправляет на соответствующий адрес в частной сети.Когда наш сервер example1.com делает запрос к example2.com, у нас есть настройка haproxy для отправки заголовка set-cookie обратно на запрос.Это хорошо работало для нашей промежуточной среды, где example3.com вызывал example3.net, но в процессе работы мы наблюдаем другое поведение.

frontend example_front
   bind *:10094
   default_backend example_back

backend example_back
   mode http
   option httpchk get /api/health/check HTTP/1.0\r\nHost:\ site1.example2.com
   default-server inter 10s fall 2 rise 2
   http-check expect status 204

   cookie SERVERID insert indirect nocache domain .example1.com
   server ex-1 192.168.12.68:8447 check cookie w1
   server ex-2 192.168.22.68:8447 check cookie w2

В консоли разработчика Chrome я вижу, что при запросах, отличных от https / http (в моем случае - wss), заголовок Set-Cookie возвращается, но не устанавливается в браузере,Однако, когда я сверну конечную точку, я всегда вижу возвращение cookie в моих заголовках, поэтому я знаю, что моя логика Haproxy работает.Заголовок Set-Cookie также отправляется обратно на другие запросы в приложении, и, если они находятся от example1.com до example1.com, они установлены правильно.Кажется, он не устанавливается (без каких-либо ошибок или предупреждений), когда сайт example2.com возвращает заголовок Set-Cookie для example1.com.У меня есть клиент, отправляющий запрос с использованием withCredentials, и сервер правильно отвечает всеми правильными заголовками Allow, которые он должен установить.Когда я выполняю такой же тип запроса в нашей промежуточной среде с example3.com на example3.net, он устанавливает cookie-файл.Это привело меня к мысли, что не будет проблемы с CORS, так как эти два домена были разными.

Это привело меня к мысли, что мне может потребоваться привязать любые запросы к этому внешнему интерфейсу к тому же сертификату, на который он будет отвечать, в надежде, что эта проблема связана с прекращением SSL, возникающимдругое происхождение (здесь мои знания по SSL становятся немного размытыми, так что прости меня за любые вопиющие заблуждения, которые у меня есть).Мое решение состоит в том, чтобы добавить следующее:

frontend example_front
   bind *:10094 ssl crt-list /etc/haproxy/crt-list.txt
   default_backend example_back

Итак, у меня есть несколько вопросов по этому вопросу - во-первых, я на правильном пути, предполагая, что эта проблема возникает из-за того, что example2.com отвечаетна example1.com с заголовком Set-Cookie?(По существу CORS)

Во-вторых, почему example3.com может установить cookie для example3.net?(ни один из них не использует один и тот же подстановочный знак или SNI)

В-третьих, является ли мой подход к добавлению привязки SSL к интерфейсу правильным способом решения этой проблемы?Если нет, то как бы мне, чтобы example2.com отправил cookie-файл на example1.com?

Спасибо!

...