Я пытаюсь управлять сессиями в Spring Security без использования файлов cookie. Обоснование - наше приложение отображается в iframe из другого домена, нам нужно управлять сеансами в нашем приложении, а Safari ограничивает создание файлов cookie между доменами. (context: domainA.com отображает domainB.com в iframe. domainB.com устанавливает cookie JSESSIONID для использования на домене.com, но поскольку браузер пользователя показывает domainA.com - Safari ограничивает domainB.com от создания файла cookie),
Единственный способ, которым я могу это достичь (против рекомендаций OWASP по безопасности), - включить JSESSIONID в URL как параметр GET. Я НЕ ХОЧУ сделать это, но я не могу придумать альтернативы.
Таким образом, этот вопрос касается:
- Есть ли лучшие альтернативы для решения этой проблемы?
- Если нет - как я могу добиться этого с помощью Spring Security
Рассмотрение Spring Documentation вокруг этого, используя enableSessionUrlRewriting, должно
Поэтому я сделал это:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
.enableSessionUrlRewriting(true)
Это не добавило JSESSIONID в URL-адрес, но теперь это должно быть разрешено. Затем я использовал код, найденный в этом вопросе, чтобы установить "режим отслеживания" на URL
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext
.setSessionTrackingModes(
Collections.singleton(SessionTrackingMode.URL)
);
Даже после этого приложение все еще добавляет JSESSIONID в качестве файла cookie, а не в URL.
Может ли кто-нибудь помочь мне указать мне в правильном направлении?