# Discourse 与 Nextcloud 的 SSO 集成

**URL:** https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851
**Category:** SSO
**Created:** [2021年一月3日 11:09 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851 "2021-01-03T11:09:30Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月3日 11:09 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/1 "2021-01-03T11:09:30Z")

</div>

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

1. 注意到 Nextcloud 和 Discourse 之间用于 SSO 的某种“集成应用”：  
[Discourse SSO - Apps - App Store - Nextcloud](https://apps.nextcloud.com/apps/discoursesso)

2. 在 Nextcloud 中，进入 + 应用 → 集成 → [Discourse SSO](https://meta.discourse.org/t/13045?silent=true)。安装并启用该应用。  

3. 进入我的设置，输入我的 SSO 信息：  

4. 我前往我的 Discourse 论坛网站（该网站是瑞典语的，抱歉），并进入我的管理员设置：  

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

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

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [2021年一月3日 11:35 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/2 "2021-01-03T11:35:58Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月3日 11:43 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/3 "2021-01-03T11:43:28Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Johani](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/johani/32/176920_2.png) [@Johani](https://meta.discourse.org/u/Johani)
#### Post date: [2021年一月3日 12:04 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/4 "2021-01-03T12:04:53Z")

</div>

来自 Nextcloud

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

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

---

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月3日 12:07 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/5 "2021-01-03T12:07:50Z")

</div>

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

编辑：我已在 [Nextcloud 论坛](https://help.nextcloud.com) 发布了一个帖子。如果那里能带来任何明确信息，我会再回来汇报。

---

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月3日 17:11 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/6 "2021-01-03T17:11:00Z")

</div>

好的，[Nextcloud 论坛的一位用户](https://help.nextcloud.com/t/external-site-integration-help-nextcloud-com-does-not-work/103088/3) 确认了问题似乎出在 Discourse 上，因为它无法在 `iframe` 中运行。不过，简单的 Google 搜索指向了这个四年前的 GitHub 项目：

> **[GitHub - BeXcellent/discourse-allowiframe: Changes X-Frame-Options to allow iframe embedding.](https://github.com/BeXcellent/discourse-allowiframe/)**
>
> Changes X-Frame-Options to allow iframe embedding.

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

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [2021年一月3日 18:33 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/7 "2021-01-03T18:33:00Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![sunjam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sunjam/32/175682_2.png) [@sunjam](https://meta.discourse.org/u/sunjam)
#### Post date: [2021年一月3日 19:02 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/8 "2021-01-03T19:02:54Z")

</div>

您可以在项目的 GitHub 上提交问题和功能请求。请注意，该项目尚未[针对 20 版本进行更新](https://github.com/soudis/discoursesso/issues/14)。点击查看详情。

---

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月3日 19:39 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/9 "2021-01-03T19:39:37Z")

</div>

谢谢你的建议！你自己还没用过这个应用吧？

---

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月9日 01:23 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/10 "2021-01-09T01:23:58Z")

</div>

特此说明：我安装了“allowifram”插件，我的 Discourse 确实崩溃了。😛

---

<div class="post-metadata">

### Author: ![ifeabc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ifeabc/32/204255_2.png) [@ifeabc](https://meta.discourse.org/u/ifeabc)
#### Post date: [2021年一月13日 22:05 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/11 "2021-01-13T22:05:22Z")

</div>

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

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [2021年五月5日 23:07 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/12 "2021-05-05T23:07:36Z")

</div>

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

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

![Screen Shot 2021-05-05 at 3.58.30 PM](https://global.discourse-cdn.com/meta/original/3X/7/8/7803391c7c247cb5a382b368a88c078d59693153.png)

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

请注意，在 Discourse 中，[Discourse SSO](https://meta.discourse.org/t/13045?silent=true) 已更名为 [Discourse Connect](https://meta.discourse.org/t/13045?silent=true)。启用它将完全替换 Discourse 中的所有其他登录选项，因此请务必谨慎使用。

---

<div class="post-metadata">

### Author: ![JB3](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jb3/32/216065_2.png) [@JB3](https://meta.discourse.org/u/JB3)
#### Post date: [2021年九月2日 13:25 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/13 "2021-09-02T13:25:41Z")

</div>

> [@ifeabc](#):
>
> 开发者表示不行，但他/她通过以下插件绕过了 iframe 问题：[https://github.com/soudis/discourse-allow-same-origin](https://github.com/soudis/discourse-allow-same-origin)  
> 我本人尚未尝试过。

这个插件有用吗？👀

---

<div class="post-metadata">

### Author: ![ayian\_2004](https://avatars.discourse-cdn.com/v4/letter/a/ccd318/32.png) [@ayian\_2004](https://meta.discourse.org/u/ayian_2004)
#### Post date: [2021年九月16日 06:57 UTC](https://meta.discourse.org/t/discourse-with-sso-from-nextcloud/174851/14 "2021-09-16T06:57:04Z")

</div>

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