CSRFTokenVerifier::InvalidCSRFToken al iniciar el inicio de sesión SAML en Discourse 2026.6

CSRFTokenVerifier::InvalidCSRFToken al iniciar el inicio de sesión SAML en Discourse 2026.6
Hola,

Estoy intentando configurar la autenticación SAML con ADFS en una instalación nueva de Discourse.

Entorno

  • Versión de Discourse: 2026.6 (Rails 8.0.5)
  • Plugin discourse-saml
  • Commit del plugin:
7d0fe944bf33588e6813bffaef5eb8f34e37d039
  • HTTPS habilitado
  • Proxy inverso / Balanceador de carga delante de Discourse
  • force_https = true

Configuración SAML

El punto final de metadatos funciona correctamente:

https://<hostname>/auth/saml/metadata

Los metadatos contienen:

  • EntityID
  • URL ACS
  • URL SLO

El equipo de ADFS importó los metadatos correctamente.

Problema

Al hacer clic en Iniciar sesión con SAML, Discourse nunca redirige a ADFS.

En su lugar, devuelve inmediatamente:

Lo sentimos, la autorización expiró o ha cambiado de navegador.

Registro de Rails

Started GET "/session/csrf"
Completed 200 OK

Started POST "/auth/saml"

(saml) ¡Error de autenticación!
CSRFTokenVerifier::InvalidCSRFToken

Started GET "/auth/failure?message=csrf_detected&strategy=saml"

Aspectos ya verificados

  • HTTPS funciona
  • Discourse.base_url = https://hostname
  • force_https = true
  • La cookie de sesión (_forum_session) existe
  • authenticity_token está incluido en POST /auth/saml
  • El plugin discourse-saml es la rama principal más reciente
  • El punto final de metadatos funciona
  • Los metadatos de ADFS se han vuelto a crear desde los metadatos del SP

Solicitud del navegador

POST /auth/saml contiene:

  • Cookie _forum_session
  • authenticity_token

Sin embargo, la solicitud falla inmediatamente con:

CSRFTokenVerifier::InvalidCSRFToken

Nunca llega a ADFS.

Información adicional

Las herramientas de desarrollo del navegador muestran:

x-csrf-token: undefined

¿Podría ser un problema de CSRF de Rails 8 / OmniAuth, o se requiere otra configuración para discourse-saml en versiones recientes de Discourse?

Cualquier sugerencia sería apreciada.


Discourse.base_url

https://testvknowyeni.vakifbank.intra

SiteSetting.force_https

true

SiteSetting.same_site_cookies

Lax