在新配置的 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配置的站点)上正常工作 - 按钮会出现在所有其他实例的登录界面中
- 但这些按钮在没有明确解决方案的情况下会失效。
由于在 Customization > Plugin 中没有关于 discourse-saml 的专门主题,我建议创建一个并在此帖的第一条中提及这个注意事项。我相信可以从 提及 SAML 的 50 多个主题 中进行一些整合。如果我知道这一点,我会以不同的方式设置我的服务。
(顺便说一下,原始的 CSP 错误可能是由于 iframe 尝试加载原始站点而不是当前站点造成的。)
在多站点中隐藏 SAML 按钮
这是一个为在多站点上激活 SAML 插件的人提供的快速修复方法。![]()
- 前往 管理 > 主题 并点击“安装新主题”
- 创建新组件(名称为:“隐藏 SAML 按钮”)
- 添加 CSS:
#login-buttons .btn.btn-social.saml { display: none; /* 插件与多站点不兼容 */ } - 将该组件应用到所有主题。
现在,SAML 按钮(在此实例中不起作用)将不再显示。
此主题已在 3 天后自动关闭。不再允许新的回复。