Я пытаюсь реализовать междоменный SSO-Auth-сервер.Цель состоит в том, чтобы прочитать информацию о проверенных пользователях, предоставленную https://auth.my -domain.com / profile из https://app.other -domain.com через XmlHttpRequest.(не jsonp!) Следовательно, файл cookie необходимо передавать с app.other-domain.com на auth.my-domain.com.
В Firefox он работает нормально.Но не в Google-Chrome.Точнее: в FF файл cookie отправляется с каждым XHR через любые границы домена, но chrome отправляет файл cookie только в тот же домен 2-го уровня.
Firefox: auth.my-domain.com <> app.my-domain.com OK
Firefox: auth.my-domain.com <> app.other-domain.com OK
Chrome: auth.my-domain.com <> app.my-domain.com OK
Chrome: auth.my-domain.com <> app.other-domain.com FAIL :(
Chrome 73.0.3683.86 Firefox 66.0.1 (64-разрядная версия) ОС: Ubuntu 18.10
В соответствии с этим (и многими другими документами, которые я прочитал), оно должно работать: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Это точный пример, который не работает в Chrome: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
Я не могу найти информацию, почему он не работает в Chrome.Поиск в Интернете обеспечивает только некоторые ошибки реализации, такие как забытые или недействительные заголовки контроля доступа, отсутствие флага .withCredentials в клиенте, блокирование параметра cookie SameSite ... Я не знаю, что здесь происходит.
Тест/ Воспроизвести:
Сервер аутентификации:
https://auth.my -domain.com / profile
После аутентификации при аутентификации.my-domain.com следующий куки установлен (и обновляется с каждым запросом):
set-cookie: test=1; expires=Wed, 27-Mar-2019 08:32:42 GMT; Max-Age=60; path=/; domain=auth.my-domain.com; secure; HttpOnly
Клиентский скрипт
https://app.other -domain.com/
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://auth.my-domain.com/profile');
xhr.withCredentials = true;
xhr.onload = function () {
console.log(xhr.responseText);
}
xhr.send();
Заголовки запросов клиентов (Chrome DevTools)
Origin: https://app.other-domain.com
Referer: https://app.other-domain.com/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
Есть предупреждение «Отображаются временные заголовки»,Я не мог найти никакого объяснения этому.: /
Заголовки запросов клиентов (FF DevTools)
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: de,en-US;q=0.7,en;q=0.3
Connection: keep-alive
Cookie: test=1
Host: auth.zandura.loc
Origin: https://app.other-domain.com
Referer: https://app.other-domain.com/
TE: Trailers
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/66.0
Заголовки ответов конечных точек API:
access-control-allow-credentials: true
access-control-allow-origin: https://app.other-domain.com
access-control-allow-methods: GET
content-type: application/json; charset=utf-8
date: Wed, 27 Mar 2019 09:12:37 GMT
server: nginx/1.15.9
status: 200
x-powered-by: PHP/7.3.3