CSRFTokenVerifier::InvalidCSRFToken ao iniciar login SAML no Discourse 2026.6
Olá,
Estou tentando configurar a autenticação SAML com ADFS em uma instalação nova do Discourse.
Ambiente
- Versão do Discourse: 2026.6 (Rails 8.0.5)
- Plugin discourse-saml
- Commit do plugin:
7d0fe944bf33588e6813bffaef5eb8f34e37d039
- HTTPS habilitado
- Proxy reverso / Balanceador de carga na frente do Discourse
- force_https = true
Configuração SAML
O endpoint de metadados funciona corretamente:
https://<hostname>/auth/saml/metadata
Os metadados contêm:
- EntityID
- URL do ACS
- URL do SLO
A equipe do ADFS importou os metadados com sucesso.
Problema
Ao clicar em Login com SAML, o Discourse nunca redireciona para o ADFS.
Em vez disso, retorna imediatamente:
Desculpe, a autorização expirou ou você mudou de navegador.
Log do 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"
Itens já verificados
- HTTPS funciona
- Discourse.base_url = https://hostname
- force_https = true
- Cookie de sessão (_forum_session) existe
- authenticity_token está incluído no POST /auth/saml
- Plugin discourse-saml é a branch main mais recente
- Endpoint de metadados funciona
- Metadados do ADFS foram recriados a partir dos metadados do SP
Solicitação do navegador
O POST /auth/saml contém:
- Cookie _forum_session
- authenticity_token
No entanto, a solicitação falha imediatamente com:
CSRFTokenVerifier::InvalidCSRFToken
Nunca chega ao ADFS.
Informações adicionais
O DevTools do navegador mostra:
x-csrf-token: undefined
Isso poderia ser um problema de CSRF do Rails 8 / OmniAuth, ou há outra configuração necessária para o discourse-saml em versões recentes do Discourse?
Qualquer sugestão seria apreciada.
Discourse.base_url
https://testvknowyeni.vakifbank.intra
SiteSetting.force_https
true
SiteSetting.same_site_cookies
Lax