Кросс-домен ajax запрос с jQuery без отправки куки - PullRequest
0 голосов
/ 19 марта 2020

Inte rnet завален этим типом запроса, но я спрашиваю его снова, потому что все ответы, кажется, около 2014 года. У меня есть похожие проблемы, но ни одно из старых исправлений не работает сейчас, поэтому я ' Я не уверен, что что-то новое понадобится в 2020 году (и далее).

Я пытаюсь позвонить с domainA.com на domainB.com. Пользователь аутентифицирован на domainB.com, который хранится в Cook ie в этом домене.

У меня есть административный доступ к обоим доменам, поэтому я могу вносить изменения на любом конце по мере необходимости.

Вот мой jQuery ajax звонок, используемый на domainA.com сайте:

$.ajax({
    url: "https://domainB.com/endpoint",
    xhrFields: {
        withCredentials: true
    }}
)

Я также пробовал дополнительные свойства, такие как:

  • crossDomain: true
  • dataType: "json"

Сайт domainB.com получает запрос, , но без файлов cookie по запросу .

заголовки запроса :

host -> domainB-host
connection -> close
accept -> */*
sec-fetch-dest -> empty
user-agent -> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
dnt -> 1
origin -> https://domainA.com
sec-fetch-site -> cross-site
sec-fetch-mode -> cors
referer -> https://domainA.com/
accept-encoding -> gzip, deflate, br
accept-language -> en-US,en;q=0.9

Вкл. domainB.com Я также устанавливаю следующие заголовки ответа :

Access-Control-Allow-Origin: https://domainA.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Origin

Есть идеи, почему файлы cookie domainB.com не передаются в запросе от domainA.com, когда CORS (я думаю) правильно (я думаю) настроен?

ОБНОВЛЕНИЕ 1 Это работает в Firefox, но не в Chrome (в Ма c). Ранее я тоже тестировал в Firefox, но он не работал. С указанными выше конфигурациями он действительно работает в Firefox.

1 Ответ

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

Оказывается, это связано с изменениями Chrome в версии 80:

Там действительно хорошая запись от Троя Ханта здесь .

Короче говоря, единственные файлы cookie, которые будут переданы сейчас это те, на которых установлены SameSite=None и Secure. Таким образом, повар ie должен быть настроен так:

Set-Cookie: cookie-name=cookie-value; SameSite=None; secure

Теперь это единственные файлы cookie, которые будут переданы Chrome для межсайтовых запросов.

...