“认证失败!csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError” 错误,原因是缺少 session["omniauth.state"]

您好,
我们正尝试在生产环境中部署 Discourse 论坛。由于我们使用自己的 OAuth 提供商,因此启用了 discourse-oauth2-basic 插件来实现该功能。

当我们使用自定义 OAuth 提供商登录时,遇到以下错误:

“Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected”

经过一些调试后发现,重定向后会话中缺少 “omniauth.state”,导致无法在 /auth/oauth2_callback 中验证 state 字段。如有任何帮助,我们将不胜感激。

注意:整个设置开发模式下运行正常。

谢谢。

身份验证是否在同一浏览器中开始和结束?您是否更改了默认的 SameSite Cookie 设置值?

是的,@david,认证过程在同一个浏览器中开始和结束。same_site_cookies 的值未作更改,其默认设置为“Lax”。

您是否按照我们的标准安装指南进行操作?

很遗憾,如果没有对站点的可见性,我们很难在此提供帮助。您能分享一个链接吗?

你好 @david,我们正使用 Docker 容器部署 Discourse。我们使用的 Dockerfile 位于 https://github.com/discourse/discourse_docker/tree/master/image/base。由于 Docker 容器内没有启动 Discourse 的脚本,我们添加了一个小型启动脚本,用于预先编译并启动 Discourse。
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompile
RAILS_ENV=production bundle exec rails server --binding=0.0.0.0

很抱歉,我们很难在此为自定义安装提供社区支持。请尝试使用 官方指南 设置 Discourse。如果您无法完成此操作,Marketplace 频道中或许有人可以收费提供帮助。