Session Cook ie не отправляется для запросов CORS в Safari - PullRequest
0 голосов
/ 06 августа 2020

Резюме: мы делаем запрос на другое происхождение. Он отлично работает в Chrome и FF, но не в Safari.

CORS включен на сервере, и ответ на предполетный запрос выглядит хорошо.

Это часть ответа с сервера для предполетного запроса OPTIONS.

URI=/access-token/generate
HTTP Headers=[Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:origin, content-type, accept
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS, HEAD
Access-Control-Allow-Origin:https://mybank.com

На стороне клиента мы установили withCredentials=true.

Это код для выполнения запроса перекрестного происхождения. Обратите внимание, что пользователь должен войти в систему и приготовить сеанс ie до того, как будет сделан этот вызов.

var data = JSON.stringify({
    "data": "mydata"
}
);
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("POST", "https://anotherbank.com/access-token/generate");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(data);
  • Предварительный вызов ОК во всех браузерах.
  • В фактическом запросе , в то время как Firefox и Chrome отправляют кука сеанса ie, Safari этого не делает.

Проблема в Safari устранена после отключения Prevent Cross-Site Tracking явным образом , но просить пользователей сделать это не идеально.

Я уже читал подобные вопросы раньше, совет, чтобы исправить это, должен иметь прокси между ними.

Есть ли другой способ решить эту проблему? Что делать с такими «законными» запросами, которые не используются для отслеживания?

...