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