在 Discourse 2026.6 上启动 SAML 登录时出现 CSRFTokenVerifier::InvalidCSRFToken

Discourse 2026.6 中启动 SAML 登录时出现 CSRFTokenVerifier::InvalidCSRFToken

你好,

我试图在一台全新的 Discourse 安装中配置使用 ADFS 的 SAML 身份验证。

环境

  • 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 团队已成功导入元数据。

问题

点击 使用 SAML 登录 时,Discourse 不会重定向到 ADFS。

而是立即返回:

抱歉,授权已超时,或您已切换浏览器。

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
  • 会话 Cookie(_forum_session)存在
  • POST /auth/saml 请求中包含了 authenticity_token
  • discourse-saml 插件为最新的 main 分支
  • 元数据端点工作正常
  • ADFS 元数据已根据 SP 元数据重新生成

浏览器请求

POST /auth/saml 包含:

  • _forum_session Cookie
  • authenticity_token

然而请求立即失败,并返回:

CSRFTokenVerifier::InvalidCSRFToken

它从未到达 ADFS。

其他信息

浏览器 DevTools 显示:

x-csrf-token: undefined

这是否是 Rails 8 / OmniAuth 的 CSRF 问题,还是 discourse-saml 在近期的 Discourse 版本中需要其他配置?

任何建议都将不胜感激。


Discourse.base_url

https://testvknowyeni.vakifbank.intra

SiteSetting.force_https

true

SiteSetting.same_site_cookies

Lax