Ajax-вызов с withCredentials: true не отправляет cookie в запросе - PullRequest
0 голосов
/ 29 октября 2018

Мой сценарий: example.com - это страница django, которую посещает пользователь. сессия устанавливается сервером. Теперь у меня есть приложение внешнего интерфейса в другом домене под названием xyz.com . Теперь мне нужно вызывать API на example.com , поэтому я пытаюсь сделать вызов ajax с withCredentials: true , но это не похоже на отправку cookie 'sessionId' в запросе.

Я уже видел некоторые ответы о переполнении стека, но предлагаемые ответы не работают. ссылка1 ссылка2 ссылка3

Что я пытался: Мой бэкэнд написан на Django, поэтому я попытался установить

CORS_ALLOW_CREDENTIALS = True
    # Cross Origin Request Settings (CROS)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS'
)
CORS_ALLOW_HEADERS = (
    'x-requested-with',
    'content-type',
    'accept',
    'origin',
    'authorization',
    'x-csrftoken',
    'cache',
    'cookie',
)

CORS_ORIGIN_WHITELIST = [
    '*'
]

SESSION_COOKIE_HTTPONLY = False

SESSION_COOKIE_DOMAIN = 'example.com'

Я использую ajax для вызова API на example.com

jQuery.ajax({
 url: "http://example.com/api/v1/admin/settings/",
 dataType: 'json',
 xhrFields: { withCredentials: true },
 success: function(data) {
 console.log(data);
 }
});

1 Ответ

0 голосов
/ 01 ноября 2018

Я отвечаю на мой вопрос, чтобы он мог помочь в случае, если кто-то застрянет в той же ситуации.

Я обнаружил, что в django SESSION_COOKIE_SAMESITE по умолчанию Lax.

«Слабый» (по умолчанию): обеспечивает баланс между безопасностью и удобством использования для веб-сайтов, которые хотят поддерживать сеанс пользователя, вошедшего в систему после того, как пользователь пришел по внешней ссылке.

В сценарии GitHub файл cookie сеанса будет разрешен, когда по обычной ссылке с внешнего сайта и заблокирован в CSRF-склонные методы запроса (например, POST).

Так что мне пришлось установить значение «Нет» в настройках, чтобы разрешить браузеру отправлять cookie.

SESSION_COOKIE_SAMESITE = None

см. Документы здесь

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