Для начала я бы посоветовал вам не отключать заголовок "X-Frame-Options"
и не использовать ваше приложение в iframe.
Это создает угрозу безопасности, о которой вы можете прочитать подробнее в этом ответе .
Теперь, чтобы объяснить поведение, которое вы видите.
Spring Security использует Session
cook ie для хранения сеанса пользователя.
Файлы cookie связаны с доменами, например, если, например, если с доменом stackoverflow.com
связан повар ie, то этот повар ie будет включен в любой запрос к stackoverlow.com
.
Чтобы контролировать это поведение, файлы cookie также имеют атрибут называется SameSite
.
Атрибут SameSite
может иметь 3 значения: None
, Lax
, Strict
или может быть не задан и не иметь значения.
Когда значение None
, оно ведет себя так, как описано выше (включено во все запросы).
Если значение Lax
, то повар ie будет включен только в навигацию верхнего уровня GET
запросы.
Session
cook ie, который использует Spring Security не устанавливает атрибут SameSite
.
В настоящее время (март 2020 г.) некоторые браузеры, такие как Firefox и Edge, обрабатывают атрибут unset так же, как None
.
Однако Chrome экспериментируя с обработкой атрибута unset так же, как Lax
.
Подробнее об этом можно прочитать в Chrome Статус платформы .
В итоге, при использовании Chrome Session
cook ie обрабатывается так, как будто для SameSite
установлено значение Lax
.
Поскольку рендеринг приложения в iframe не является навигацией верхнего уровня, Session
cook ie не включен в запрос от iframe, и приложение не может знать, что пользователь вошел в систему.
Вы можете явно установить атрибут SameSite
в None
, используя Spring Session.
Опять же, я бы предостерег от этого, так как это может сделать ваше приложение уязвимым для CSRF и атак с использованием clickjacking.
Если после рассмотрения последствий для безопасности вы считаете необходимым установить атрибут SameSite
равным None
, вы может сделать это по inc привлекая Spring Session в ваши зависимости и создавая custom CookieSerializer
.