CSRFTokenVerifier::InvalidCSRFToken при инициации входа через SAML в Discourse 2026.6
Здравствуйте,
Пытаюсь настроить аутентификацию через SAML с использованием ADFS на чистой установке Discourse.
Окружение
- Версия Discourse: 2026.6 (Rails 8.0.5)
- Плагин discourse-saml
- Коммит плагина:
7d0fe944bf33588e6813bffaef5eb8f34e37d039
- HTTPS включен
- Обратный прокси-сервер / балансировщик нагрузки перед Discourse
- force_https = true
Настройка SAML
Эндпоинт метаданных работает корректно:
https://<hostname>/auth/saml/metadata
Метаданные содержат:
- EntityID
- ACS URL
- SLO URL
Команда ADFS успешно импортировала метаданные.
Проблема
При нажатии на Login with SAML Discourse не перенаправляет на ADFS.
Вместо этого сразу возвращается сообщение:
Sorry, the authorization timed out, or you have switched browsers.
Логи Rails
Started GET "/session/csrf"
Completed 200 OK
Started POST "/auth/saml"
(saml) Authentication failure!
CSRFTokenVerifier::InvalidCSRFToken
Started GET "/auth/failure?message=csrf_detected&strategy=saml"
Что уже проверено
- HTTPS работает
- Discourse.base_url = https://hostname
- force_https = true
- Кука сессии (_forum_session) существует
- authenticity_token включен в POST /auth/saml
- Плагин discourse-saml — последняя ветка main
- Эндпоинт метаданных работает
- Метаданные ADFS созданы заново на основе метаданных SP
Запрос из браузера
POST /auth/saml содержит:
- куку _forum_session
- authenticity_token
Однако запрос сразу завершается с ошибкой:
CSRFTokenVerifier::InvalidCSRFToken
Он никогда не достигает ADFS.
Дополнительная информация
Инструменты разработчика в браузере показывают:
x-csrf-token: undefined
Может ли это быть проблемой CSRF в Rails 8 / OmniAuth, или требуется дополнительная настройка для discourse-saml в последних версиях Discourse?
Буду признателен за любые предложения.
Discourse.base_url
https://testvknowyeni.vakifbank.intra
SiteSetting.force_https
true
SiteSetting.same_site_cookies
Lax