Я работаю с клиентом, где я делаю небольшой выделенный сайт на поддомене. Они хотят, чтобы я использовал их API, чтобы сделать простой пост-запрос, когда пользователь нажимает кнопку, но клиент не хочет, чтобы пользователь снова входил в систему, а хочет, чтобы он использовал токен доступа с основного сайта. Поэтому я попросил их инженеров добавить ответ на postMessage из моего субдомена с токеном доступа
Структура домена будет такой:
Site1 - https://www.example.com
Site2 - https://sub.example.com
и очень простой пример того, что у меня есть и что у них есть:
//set the src of the iframe
$("#main-site-iframe").attr("src", "https://www.example.com");
//wait for the main site page to open
$("#main-site-iframe")[0].onload = () => {
//my page posts a message to their site
$("#my-iframe")[0].contentWindow.postMessage("jwt", "https://www.example.com");
};
//their site listens for a request
window.addEventListener('message', tokenRequest, false);
function tokenRequest(e) {
//make sure the request is from the correct subdomain
if(e.origin == 'https://sub.example.com')
{
//respond with the access token
e.source.postMessage(authJWT, e.origin);
}
}
Обычно шаги go примерно так:
- Вход на сайт1
- Нажмите кнопку, которая загружает сайт2
- Сайт2 загружает фрейм, в котором есть сайт1
- Поскольку пользователь уже вошел в Site1, он уже вошел в сайт внутри iframe
- Site2 делает postMessage для получения jwt
- Site1 отвечает jwt
- Все работало правильно, теперь у нас есть jwt, поэтому мы можем использовать API
В обычных условиях это все работает правильно, но по некоторым причинам это не работает в частных браузерах.
- Вход на сайт1
- Нажмите кнопку, которая загружает сайт2
- Сайт2 загружает фрейм, в котором есть сайт1
- Загруженный сайт1 НЕ имеет пользователь, вошедший в систему
- Site2 выполняет postMessage и получает ложный ответ, потому что они не вошли в систему
- Я перенаправляю на экран входа в систему Site1, потому что я предполагаю, что они действительно вышли из системы
Каким-то образом загрузка iframe приводит к тому, что пользователь полностью выходит из системы (переход на домашнюю страницу в другой вкладке показывает, что пользователь фактически вышел из системы)
Странность в том, что это только происходит в первый раз в приватном окне, и если пользователь повторяет первые несколько шагов снова, во второй раз страница работает правильно (если они не закрывают приватный браузер и не запускаются заново). Поэтому, если вы выполните это, он будет работать правильно
- Вход на сайт1
- Нажмите кнопку, которая загружает сайт2
- Сайт2 загружает фрейм, в котором есть сайт1
- Загруженный сайт1 НЕ работает ave пользователь вошел в систему
- Site2 выполняет postMessage и получает ложный ответ, потому что они не вошли в систему
- Я перенаправляю на экран входа в систему Site1, потому что я предполагаю, что он фактически вышел из системы
- Вход в Site1 СНОВА
- Нажмите кнопку, которая загружает Site2
- Site2 загружает фрейм, в котором находится Site1
- Поскольку пользователь уже вошел в Site1 , они уже зарегистрированы на сайте внутри iframe
- Site2 делает postMessage для получения jwt
- Site1 отвечает jwt
- Все работает правильно
Есть ли что-то, чего мне не хватает в postMessage, о котором я не знаю, или что-то еще? Заранее спасибо.