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