Как правильно настроить междоменные куки с SameSite None и Secure? - PullRequest
1 голос
/ 17 марта 2020

Я унаследовал сайт для поддержки. Он использует две разные сторонние программы и передает информацию между ними с помощью iFrame для установки файлов cookie. Информация не особенно конфиденциальна.

Используя generic c версии всего, скажем:
* Инструмент 1: www.xyzWarehouse.com
* Инструмент 2: www.xyzCorp.com
* В Страница между инструментами: tools.xyzCorp.com

  1. xyzWarehouse открывает крошечный iFrame для tools.xyzCorp.com/setTransferCookies.jsp
  2. setTransferCookies. jsp устанавливает файлы cookie для домена xyzCorp.
  3. xyzWarehouse затем запускает черный ящик, который открывает URL-адрес для правильной страницы xyzCorp
  4. пользовательский JS код в xyzCorp, затем открывает эти файлы cookie и использует их для предварительного заполнения полей формы.

Недавно я пытался обновить файлы cookie, чтобы учесть изменения требований безопасности браузера. В настоящее время моей текущей проблемой является попытка заставить файлы cookie работать на Chrome, используя SameSite: None и Secure.

В долгосрочной перспективе мы хотим, чтобы все три местоположения были похожи на:
* www.xyzWarehouse.com
* corp.xyzWarehouse.com
* tools.xyzWarehouse.com

Но это должно go через бюрократизм с ИТ и влечет за собой изменения в администраторе для tool1 и tool2. Нам нужно промежуточное решение, чтобы поддерживать нас до тех пор.

Вот что я пробовал:

Оригинальный код 1: Использование. jsp

cookieString = cookieString.substring(0,cookieString.length()-1) + "}";
Cookie cookie = new Cookie ("xyzTracking",cookieString);
cookie.setMaxAge(365 * 24 * 60 * 60);
cookie.setDomain("xyzWarehouse.com");
response.addCookie(cookie);

Я не могу найти версию Cookies, которая включает тот же сайт, поэтому, вероятно, не могу использовать это. Пожалуйста, дайте мне знать, если я ошибаюсь. Это, конечно, выдает ошибку, сообщающую мне, что мне нужно использовать SameSite: нет

Попытка 2: использование JavaScript

for (i=0;i<attPairs.length;i++) {
    var pair = attPairs[i].split("=");
    params[pair[0]] = pair[1];
}
jQuery.cookies.set( 'xyzTracking', params, {expiresAt: date, domain:'xyzWarehouse.com', sameSite: 'None', secure: 'true'});

Chrome жаловался - ошибки на одном и том же сайте.

Попытка 3: использование JavaScript

for (i=0;i<attPairs.length;i++) {
    var pair = attPairs[i].split("=");
    params[pair[0]] = pair[1];
}
document.cookie = "xyzTracking=" + encodeURIComponent(params) + "; domain=xyzWarehouse.com; SameSite=None; Secure";

Chrome жалоба - ошибки на том же сайте

Попытка 4: использование. jsp

cookieString = cookieString.substring(0,cookieString.length()-1) + "}";
response.setHeader("Set-Cookie", "xyzTracking="+cookieString+"; SameSite=none; Secure; Domain=xyzWarehouse.com");

Chrome позволит запустить это без сообщения об ошибках, но на удаленной стороне, пытаясь получить куки, www.xyzWarehouse.com сообщает мне, что куки не установлены.

Что я делаю неправильно и как Я чиню это? У меня нет никакого опыта в. jsp, у меня большой опыт в JavaScript, но, честно говоря, я стараюсь программировать, чтобы избежать использования файлов cookie, если это вообще возможно, поэтому мне едва приходилось их устанавливать. Те, что я установил, никогда не были междоменными.

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