Discourse-saml 不兼容多站点

在新配置的 Discourse 实例中,SAML 会因默认的 Content-Security-Policy 而失败,该策略会阻止提交表单的脚本…

我们有许多客户成功地在 CSP 环境下使用 SAML 插件。您能否分享一下在浏览器控制台中看到的错误信息?

我们的所有托管服务都使用 CDN,因此我猜测该 CSP 规则可能对未使用 CDN 的用户不生效🤔。

1 个赞

是的,抱歉,我原本打算这样做,但无法复现该错误消息——尽管错误仍然存在。
现在,我只在 favicon 和 apple icon 上遇到“混合内容”错误。这些图片是在启用 force_https 之前上传的,但我认为该设置应该能处理所有图标的来源……这是一个 bug 吗?

我正试图复现最初遇到的错误,但到目前为止还没有成功。屏幕上显示的错误是“抱歉,授权您的账户时发生错误。请重试。”我认为这是一个无效票据,尽管所有配置都与 Discourse 和 Keycloak 两端现有的运行实例相匹配。真奇怪。

是的,抱歉,我原本打算这样做,但我无法复现该错误消息——尽管错误依然存在。

好的,我找到问题了。我认为问题出在配置上:

  1. 这是一个多站点实例,其中 ps.zoethical.org 是“主”站点,SAML 最初是为其配置的。
  2. forum.zoonklopper.be 实例上显示了 SAML 按钮,但其作用域被定义为 ps.zoethical.org
(saml) 认证失败!invalid_ticket: OneLogin::RubySaml::ValidationError, https://ps.zoethical.org 不是此响应有效的受众 - 有效受众: https://forum.zonnklopper.be

如果我添加 ps.zoethical.org 受众,则会得到另一个错误:

(saml) 认证失败!invalid_ticket: OneLogin::RubySaml::ValidationError, 响应接收地址为 https://forum.zonnklopper.be/auth/saml/callback,而非 https://ps.zoethical.org/auth/saml/callback

SAML 插件不支持多站点。

1 个赞

是的,这正是我刚刚意识到的。非常不幸。:frowning:

所以实际上,插件不兼容意味着:

  1. 它会在多站点中的第一个站点(或通过 DISCOURSE_HOSTNAME 配置的站点)上正常工作
  2. 按钮会出现在所有其他实例的登录界面中
  3. 但这些按钮在没有明确解决方案的情况下会失效。

由于在 Customization > Plugin 中没有关于 discourse-saml 的专门主题,我建议创建一个并在此帖的第一条中提及这个注意事项。我相信可以从 提及 SAML 的 50 多个主题 中进行一些整合。如果我知道这一点,我会以不同的方式设置我的服务。

(顺便说一下,原始的 CSP 错误可能是由于 iframe 尝试加载原始站点而不是当前站点造成的。)

在多站点中隐藏 SAML 按钮

这是一个为在多站点上激活 SAML 插件的人提供的快速修复方法。:slight_smile:

  1. 前往 管理 > 主题 并点击“安装新主题”
  2. 创建新组件(名称为:“隐藏 SAML 按钮”)
  3. 添加 CSS:
    #login-buttons .btn.btn-social.saml {
        display: none; /* 插件与多站点不兼容 */
    }
    
  4. 将该组件应用到所有主题。

现在,SAML 按钮(在此实例中不起作用)将不再显示。

此主题已在 3 天后自动关闭。不再允许新的回复。