在新配置的 Discourse 实例中,SAML 会因默认的 Content-Security-Policy 而失败,该策略会阻止提交表单的脚本…
我们有许多客户成功地在 CSP 环境下使用 SAML 插件。您能否分享一下在浏览器控制台中看到的错误信息?
我们的所有托管服务都使用 CDN,因此我猜测该 CSP 规则可能对未使用 CDN 的用户不生效🤔。
是的,抱歉,我原本打算这样做,但无法复现该错误消息——尽管错误仍然存在。
现在,我只在 favicon 和 apple icon 上遇到“混合内容”错误。这些图片是在启用 force_https 之前上传的,但我认为该设置应该能处理所有图标的来源……这是一个 bug 吗?
我正试图复现最初遇到的错误,但到目前为止还没有成功。屏幕上显示的错误是“抱歉,授权您的账户时发生错误。请重试。”我认为这是一个无效票据,尽管所有配置都与 Discourse 和 Keycloak 两端现有的运行实例相匹配。真奇怪。
是的,抱歉,我原本打算这样做,但我无法复现该错误消息——尽管错误依然存在。
好的,我找到问题了。我认为问题出在配置上:
- 这是一个多站点实例,其中 ps.zoethical.org 是“主”站点,SAML 最初是为其配置的。
- 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 插件不支持多站点。
是的,我刚刚也意识到了这一点。非常遗憾。![]()
因此,实际上,该插件的不兼容性意味着:
- 它将在多站点中的第一个站点(或通过
DISCOURSE_HOSTNAME配置的那个站点)上工作; - 登录界面会在所有其他实例上显示该按钮;
- 但这些按钮将无法工作,且没有明确的解决方案。
由于在 #plugin 频道中没有关于 discourse-saml 的专门主题,我建议创建一个新主题,并在首帖中提及这一注意事项。我相当确信可以从 提及 SAML 的 50 多个主题 中进行整合。如果早知道这一点,我当初就会以不同的方式配置我的服务了。
(顺便一提,原始的 CSP 错误很可能是由于 iframe 试图加载原始站点而非当前站点所致。)
在多站点中隐藏 SAML 按钮
这是针对在多站点上启用了 SAML 插件的用户的一个快速修复方案。![]()
- 进入 管理 > 主题,然后“安装新主题”;
- 创建新组件(名称为:“隐藏 SAML 按钮”);
- 添加 CSS:
#login-buttons .btn.btn-social.saml { display: none; /* 插件与多站点不兼容 */ } - 将该组件应用到所有主题。
现在,SAML 按钮(在此实例上无法工作)将保持隐藏状态。
此主题已在 3 天后自动关闭。不再允许新的回复。