Set-Cook ie заголовок не работает в домене - PullRequest
2 голосов
/ 18 марта 2020

Я на сайте https://aaa.shared.com. Этот веб-сайт (назовите его A) отправляет запрос xhr на URL https://zzz.shared.com/some/path (веб-сайт Z) и получает ответ со следующими заголовками:

access-control-allow-credentials: true
access-control-allow-origin: aaa.shared.com
set-cookie: foo=bar; expires=Fri, 01 Jan 2100 00:00:00 GMT; path=/; secure; samesite=none; httponly

(я следовал ответьте на этот вопрос , чтобы добавить access-control заголовки)

Теперь я ожидаю, что всякий раз, когда я нахожусь на A или Z, всякий раз, когда запрос переходит к Z ( кросс-происхождение или одинаковое происхождение, что важно, это URL запроса) браузер добавил бы повар ie, но это не так! Более того, я не вижу его установки в инструментах разработчика браузера (F12 -> Приложение -> Cookies). Я использую Chrome, но нацеливаюсь на кросс-браузерное решение.

Чего мне не хватает? Мне действительно трудно найти какую-то сложную информацию о том, как работает заголовок Set-Cookie при запросе другого источника.

РЕДАКТИРОВАТЬ: rowan_z первоначально предложил заменить samesite=lax на samesite=none, как A и Z в первой версии этого вопроса были совершенно отдельными доменами (разделяли только .com часть). Я попробовал это, и это не помогло. Но теперь я понимаю, что они на самом деле считаются SameSite, потому что они находятся на разных поддоменах домена shared.com. Так что теперь я считаю, что samesite=lax должно было бы работать и здесь.

ОБНОВЛЕНИЕ: В конце концов, я просто переместил приложение aaa.shared.com в тот же поддомен с некоторым путем zzz.shared.com/aaa/path, что касается работы с файлами cookie и CORS действительно тяжело. Кроме того, его настройка для работы с localhost добавляет дополнительные сложности.

Ответы [ 2 ]

3 голосов
/ 21 марта 2020

Все, что вы сделали, действительно требуется , чтобы заставить его работать:

  • access-control-allow-credentials: true
  • access-control-allow-origin: aaa.shared.com (не подстановочный знак)
  • Secure
  • SameSite=None

Вам просто не хватало одной вещи при отправке запроса: учетные данные: 'include' .

Я создал фиктивную конечную точку, которую вы можете использовать, чтобы дважды протестировать эту строку кода (в консоли другого домена):

fetch('https://stackoverflow.free.beeceptor.com', { credentials: 'include' });

Вы заметите повара ie будет отправлен во второй раз.

В случае, если срок действия фиктивной конечной точки истекает (не знаю, как долго она длится), или если кто-то ее уничтожает, вы можете воссоздать ее на http://beeceptor.com с этим JSON в конфигурации заголовка:

{
    "Content-Type": "application/json",
    "Set-Cookie": "test=value; Path=/; Secure; SameSite=None;",
    "access-control-allow-origin": "https://yourdomain",
    "Access-Control-Allow-Credentials": "true"
}
1 голос
/ 19 марта 2020

Вы явно указали SameSite=Lax, что ограничивает отправку файлов cookie по запросам между сайтами. Это похоже на ситуацию, когда вы хотите, чтобы SameSite=None разрешил эти куки.

Подробнее о: https://web.dev/samesite-cookies-explained

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...