Discourse 与 Nextcloud 的 SSO 集成

找不到针对此问题的指南。但我希望将 Discourse 作为“应用”集成到开源协作环境 Nextcloud 中。我认为这可以通过在 Nextcloud 中将 Discourse 以类似 iframe 的方式作为“外部站点”打开来实现。以下是我的操作步骤:

  1. 注意到 Nextcloud 和 Discourse 之间用于 SSO 的某种“集成应用”:
    Discourse SSO - Apps - App Store - Nextcloud

  2. 在 Nextcloud 中,进入 + 应用 → 集成 → Discourse SSO。安装并启用该应用。

  3. 进入我的设置,输入我的 SSO 信息:

  4. 我前往我的 Discourse 论坛网站(该网站是瑞典语的,抱歉),并进入我的管理员设置:


    向下滚动并填写以下三个字段:

  5. 我从 Discourse 和 Nextcloud 中注销。然后登录 Nextcloud(在 Nextcloud 和 Discourse 中使用相同的电子邮件地址),但无法成功打开“外部站点”以显示我的 Discourse 论坛。

为什么 Firefox 会将我的论坛识别为已嵌入?

您确定正在使用正确的 SSO 端点吗?

其次,请检查 CSP 是否导致了此行为(我不确定具体原因或方式)。

我已尝试禁用 SSO,但我的论坛所在的子域名仍然无法在 Nextcloud 中打开。不过我的常规域名可以正常打开。
您提到的 CSP 是指托管我的 Discourse 的云服务提供商吗?

来自 Nextcloud

由于各种网络浏览器和网站处理 HTTP 和 HTTPS URL 的方式不同,并且“外部站点”应用将外部链接嵌入到 IFrames 中,您的链接可能无法正常工作。

Discourse 无法在 <iframe> 标签中运行,您的 Discourse 服务器将拒绝连接。

3 个赞

谢谢!但如果集成无法实现,那为什么还会有“SSO 集成”应用呢?有没有什么变通方法可以让 Discourse 以 iframe 形式嵌入?

编辑:我已在 Nextcloud 论坛 发布了一个帖子。如果那里能带来任何明确信息,我会再回来汇报。

好的,Nextcloud 论坛的一位用户 确认了问题似乎出在 Discourse 上,因为它无法在 iframe 中运行。不过,简单的 Google 搜索指向了这个四年前的 GitHub 项目:

在编辑了 app.yml 以适配该插件后,我接下来该做什么?我是否需要重新构建 Discourse 才能完整安装它?

是的,安装任何插件都需要重新构建。

顺便提醒一下,如果一个插件已超过 4 年未维护,它极有可能导致系统崩溃。

2 个赞

您可以在项目的 GitHub 上提交问题和功能请求。请注意,该项目尚未针对 20 版本进行更新。点击查看详情。

1 个赞

谢谢你的建议!你自己还没用过这个应用吧?

特此说明:我安装了“allowifram”插件,我的 Discourse 确实崩溃了。:face_with_tongue:

如有兴趣,我曾询问开发者是否尝试过将 Discourse 集成到 Nextcloud 中:Amend so that Discourse can be opened within Nextcloud? · Issue #18 · habi-dat/discoursesso · GitHub
开发者表示没有,但他/她通过以下插件绕过了 iframe 问题:GitHub - soudis/discourse-allow-same-origin · GitHub
我尚未亲自尝试过。

2 个赞

抱歉回复晚了,最近我一直在探索 Nextcloud 和 Discourse 的集成方案。您可能已经解决了所有问题,但我还是很想交流一下心得。您是否仍在将 Discourse 和 Nextcloud 一起使用?如果是,能否分享更多您希望实现的目标以及目前的运行效果?非常感谢您的分享!

是的,正如您所了解的那样,Discourse 一直都不适合在 iframe 中加载。解决办法是利用 Discourse 自身非常灵活的主题系统,添加一个与主站风格一致的页眉。您还可以通过 Nextcloud 的主题系统对其进行相应调整,使其与主站匹配。在 Nextcloud 的“外部站点”管理设置中,选择 redirect(重定向)选项,这意味着该站点不允许嵌入。点击 Discourse 的链接时,将在同一个浏览器标签页中打开,而不会使用 iframe。

Screen Shot 2021-05-05 at 3.58.30 PM

您提到的 Nextcloud discoursesso 应用 主要用于允许用户通过 Nextcloud 向您的 Discourse 站点进行身份验证。看起来您已经正确设置了该应用。您只需访问 Discourse 的网址并尝试登录,就会看到您已使用 Nextcloud 凭据成功登录。

请注意,在 Discourse 中,Discourse SSO 已更名为 Discourse Connect。启用它将完全替换 Discourse 中的所有其他登录选项,因此请务必谨慎使用。

3 个赞

这个插件有用吗?:eyes:

我已安装该插件,但仍收到“获取 Discourse 通知失败”的提示。