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. 但这些按钮将无法工作,且没有明确的解决方案。

由于在 #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 天后自动关闭。不再允许新的回复。