Has anyone succeeded in using discourse as sso provider for nextcloud? Share recipe?

Hi all - I am interested in setting up a few small community sites with discourse plus nextcloud for document and media content sharing. It would be loverly and preferable to have SSO with discourse as SSO provider. If anyone has succeeded in doing this and can share a recipe here on how to do it I’d appreciate it. Thanks! :seedling:

The communities I am looking at creating are for my own geographically dispersed family, my neighborhood, and my son’s school.

I might also be interested in setting up a nextcloud for the organization I work for that already has an active community website. Though my organization’s community uses discourse, it uses wordpress as SSO auth now. Down the pike I’m also interested in flipping that around so we can benefit from features reliant on discourse as SSO auth.

Edit: this seems to be the page - I will be exploring this today and will let others know what I come up with if anything. :slight_smile: Any guidance along the way much appreciated.

https://docs.nextcloud.com/server/11/admin_manual/configuration_server/sso_configuration.html

1 个赞

i’ve quite the same usecases, where i want to use discourse as the SSO provider for nextcloud.

are there any updates on this?

2 个赞

Not that I am aware of. Could you ask at the nextcloud community?

it’s not a perfect implementation, but it does its job for me:

https://github.com/paroga/user_discourse

6 个赞

Social login app 从 4.10 版本开始支持 discourse。

3 个赞

太棒了!我看到 discourse 没有作为 nextcloud 中社交登录应用的“内置 oauth 提供商”。有多种方法可以使用 discourse 进行设置——你是怎么做的?可以提供一个方法吗?

我还看到该应用允许你继承来自身份验证提供商的组,这非常方便。我很想在我的 discourse/nextcloud 设置中实现这一点。

还有其他一些看起来相关的 nextcloud 应用,但我还没有全部测试过。有一个 OpenID Connect Login 应用。还有一个 Discourse SSO (Discourse SSO) 应用,但它似乎已过时/未经测试。

如我帖子所述,您需要 4.10 版本。然后在社交登录设置中有一个“自定义 Discourse”选项。

它仅支持 OpenID Connect,而 Discourse 不提供此功能。

那是用于反向操作的,如果您想使用您的 Nextcloud 帐户登录 Discourse。

3 个赞

谢谢你,Patrick!我现在又重新安装了应用程序,看到了“自定义 Discourse”选项。文档中还没有解释这一点,所以我才认为没有任何变化。另外,在 https://apps.nextcloud.com/apps/sociallogin 页面上,有一个指向 nextcloud 支持论坛的损坏链接,因此我很难弄清楚在哪里可以与开发人员讨论这个应用程序。

我现在已经让它工作了,但我遇到的最大问题是,我无法弄清楚如何默认启用它,使其成为所有现有用户唯一的登录方式。

第二个最大的问题是,用户详细信息没有正确地从 Discourse 传递到 Nextcloud。在 Nextcloud 中创建的新用户会获得一个自动生成的用户名,格式为 [内部名称]-[用户 ID],例如,在我的网站上是 kb2-3797。名称会被传递过来,但其他配置文件信息需要在 Nextcloud 中重新填写。头像也没有被传递过来。

我也在想,当这是 Nextcloud Web 应用程序唯一的登录方式时,用户将如何为桌面或移动客户端设置他们的用户名和密码。我猜他们需要知道去 Nextcloud Web 应用程序的帐户设置中设置 Nextcloud 登录凭据。

我还注意到一些其他事情:

  • 应用程序设置不是通过“应用程序”部分访问的,而是通过管理设置侧边栏访问的。我花了一点时间才找到。:slight_smile:
  • 管理设置中有三个用于该应用程序的部分,顶部和底部的部分有保存按钮,但中间的部分(用于自定义提供程序)没有。不清楚应该使用哪个来保存自定义 Discourse 设置。答案:它们都以相同的方式工作。
  • 有很多应用程序设置。这些似乎最适合我的设置:
    • 禁用自动创建新用户 = 允许在 Discourse 中存在的新用户在 Nextcloud 中被创建
    • 创建禁用账户的用户 = 不禁用新创建的用户
    • 允许用户关联他们的账户与社交登录 = 允许现有用户选择通过 Discourse 登录(:warning:无法弄清楚如何默认允许用户通过 Discourse 登录)
    • 每次登录时更新用户配置文件 = 每次登录时将 Discourse 群组同步到 Nextcloud 群组(:warning:无法正确同步用户名、姓名、个人简介和其他配置文件信息)
    • 登录时不修剪不可用的用户群组(:warning:我不知道这有什么作用,但默认启用。我怀疑它会阻止用户从 Discourse 中映射的现有 Nextcloud 群组中移除?)
    • 如果群组不存在则自动创建群组 = 已禁用,因为它会创建一些难看的群组名称,复制了你想要的群组(见下文)
    • 限制没有映射群组的用户的登录 = 已禁用
    • 限制没有分配群组的用户的登录 = 已禁用
    • 禁用通知管理员有关新用户的信息 = 已禁用,因为这有助于我了解何时创建了新的 Nextcloud 用户
    • 隐藏默认登录 = 鼓励用户通过 Discourse 登录,但仍然可以通过 Nextcloud 用户名/电子邮件和密码直接登录。
  • 我第一次尝试时,在创建群组映射之前,就立即失去了管理员访问权限。为了恢复它,我不得不进入命令行并运行 occ group:adduser admin USERNAME
  • 群组映射效果非常好!最重要的是添加 admins → Nextcloud admin 的映射,以便我的论坛中的管理员在 Nextcloud 中拥有管理员权限。我还能够添加用于安全类别的群组的映射,以便在 Nextcloud 中也授予对与这些安全类别相关的安全文件夹的访问权限。

越来越近了!

1 个赞

I’d suggest GitHub.

IMHO that’s the best way to implement it, since the id is used primarily internal and not visible in many places to normal users.
Nextcloud has no easy way to rename users, but Discourse has. Renaming a user in Discourse could lead to some strange behavior with Nextcloud if the names don’t match any more.

The avatar_url from DiscourseConnect should get passed to Nextcloud and read there. If you want to pass the bio too, a few lines in in the branch responsible for the profile updates should do the job.

You should use device passwords instead. The Nextcloud password could be different from the Discourse password, which would lead to confusion and skips the SSO.

I think these are general issues with the Nextcloud UI and not app specific.

Set the social_login_auto_redirect option to true as described in the config section if you want hide the Nextcloud login completely.

2 个赞

太棒了!谢谢你,Patrick!非常感谢你的指导。

我已经在 GitHub 上的 issue 中提出了我的主要问题,那就是我想让所有用户都通过 Discourse 登录,而目前无法做到这一点,除非用户通过 social login connect 用户偏好设置收到如何切换到 Discourse 的说明。

我现在按照你的建议设置了 social_login_auto_redirect,一旦所有人都设置好使用 Discourse,它就能很好地工作。:+1: 目前对我个人来说它工作得很好,但对使用这些网站的其他人来说则不然。他们将不允许登录。:sob:

我不太清楚你说的设备密码是什么意思——我看了你提供的链接,但那个页面上的用户偏好设置截图与我的 Nextcloud 实例看起来不一样。也许我们使用的是不同的版本?我使用的是 23.0.0 版本,处于稳定更新频道。:thinking: 或者我需要安装某个应用程序?

用户名、头像和简介同步的紧急程度较低,不过看到它正常工作会很好。我不知道为什么不能在每次登录时更新用户的这些详细信息。也许 Nextcloud 有一些特性与 Discourse 在这种情况下不兼容。例如,Discourse 只允许一个用户对应一个电子邮件地址,而我似乎能够创建第二个具有相同电子邮件地址的 Nextcloud 用户,除非我使用 Prevent creating an account if the email address exists in another account 管理员设置来阻止它。理想情况下,它应该根据电子邮件地址自动连接这些账户。

1 个赞

我不确定我是否正确理解了您目前的问题,但我假设您的问题是现有用户没有“关联的社交登录帐户”。当所有用户都关联后一切都会好起来吗?

正如您自己已经写过的,电子邮件在 Nextcloud 中不是唯一的,因此不能安全地用于用户映射。

当我切换到 sociallogin 应用时,我通过一个简单的 SQL 查询关联了现有用户。我导出了 Discourse 用户列表,并将 [internal name]-[userid](例如 kb2-3797)到现有 Nextcloud 用户名的映射插入到 Nextcloud 数据库的 sociallogin_connect 表中。您用于映射的字段(例如用户名或电子邮件)取决于您的设置。

截图似乎有点过时了,但当我打开我 Nextcloud 23.0 稳定实例上的 /settings/user/security 时,我有一个非常相似的表(包括“创建新设备特定密码的按钮”)。您能否发布您页面的截图?

2 个赞

修复现有用户对我来说不会花费太长时间——我的网站上只有少数几个用户。但就长期、可复制的解决方案而言,该方案将适用于所有希望使用 discourse 作为 nextcloud 的身份验证提供商的用户,只允许每个电子邮件地址对应一个用户,并根据电子邮件地址自动匹配他们似乎是合理的。用户无需执行任何操作即可实现这一点。

这是我的 /settings/user/security 页面的样子。

1 个赞

在页面底部有一个“创建新的应用密码”选项。您可以在那里为桌面客户端等创建新的凭据。

2 个赞

好的,这说得通,尽管语言有点令人困惑。我想我现在明白了。对于从未直接登录 nextcloud 并想安装该应用程序的新用户,他们需要使用“创建新应用程序密码”按钮来创建新的“应用程序密码”以供其使用。理想情况下,这应该是一个设备一个密码,但并非必须如此。

我将继续在 github 上跟进,看看我是否能帮助澄清文档并解决一些集成问题。但现在,我想说 @paroga 你终于解决了 2017 年的这个支持请求!:partying_face:

1 个赞

我认为你可以看看我写的教程。

我使用此功能将我的 NextCloud 连接到我的 Discourse。

1 个赞

此主题在上次回复后 30 天自动关闭。不再允许回复。