如何让 Nextcloud 用户使用类似于 "Login with Github" 的单点登录 django?

How to let Nextcloud user login in django with single sign similar to "Login with Github" in SO?

我有一个 Nextcloud 实例,所有潜在用户都有一个帐户。

我想设置一个基于 django 的 Open Source Doodle (Bitpoll),因为我不喜欢 nextcloud 投票应用程序。

出于安全原因,我想将 Doodle 应用程序限制为我的 nextcloud 用户。此外,我不希望他们使用涂鸦应用程序输入密码(因此需要单点登录)。 我想象一个类似于 Login in with Github 按钮的用户用户流程,它也可用于创建用户帐户。

涂鸦应用程序支持 LDAP,nextcloud 也支持。

有用于 OAuth 和 nextcloud 的 django 模块。

我完全没有 LDAP 经验,只有很少的 OAuth 经验。

我可以使用哪些 Nextcloud 设置/应用程序和哪些 Django 应用程序(以及设置的想法)实现所解释的场景?

更准确地说:

  1. 我是否需要使用 LDAP?或者我可以配置 OAuth,让来自 nextcloud.mydomain.org 的所有用户在应用程序中生成一个新帐户吗?
  2. 在这种情况下,我的 nextcloud 实例和 doodle 应用程序的正确 OAuth 条款是什么? nextcloud 是 OAuth 服务器,doodle 是 OAuth 客户端吗?
  3. 我可以使用哪些 Django 模块?
  4. 在这种情况下,我是否将 OAuth 与 OpenID 混淆了?

我是否需要使用 LDAP?或者我可以配置 OAuth,让来自 nextcloud.mydomain.org 的所有用户在应用程序中生成一个新帐户吗?

没有。 LDAP 本身就是一个用户目录。如果你没有,继续,因为如果你想使用 LDAP,你需要将 NCs 用户数据迁移到 LDAP(和 运行 LDAP 服务器,我完全不推荐) .

在这种情况下,我的 nextcloud 实例和 doodle 应用程序的正确 OAuth 条款是什么? nextcloud 是 OAuth 服务器,doodle 是 OAuth 客户端吗?

当然! Nextcloud 是 OAuth 提供者或 OAuth 服务器,而其他一切都是客户端。幸运的是:Nextcloud 默认是 OAuth2 提供商。

我可以使用哪些 Django 模块?

authlib provides an OAuth Module. Adding an OAuth Client is done on nextcloud's admin security page. See the NC docs了解更多信息。

Authlib 参数应该是这样的:

AUTHLIB_OAUTH_CLIENTS = {
    'twitter': {
        'client_id': 'pMBV0rbvMg2mhw', # "Client Identifier" in Nextcloud
        'client_secret': 'Twitter Consumer Secret', # "Secret" in Nextcloud
        'request_token_url': 'https://YOUR_NC_URL/index.php/apps/oauth2/api/v1/token',
        'request_token_params': None,
        'access_token_url': 'https://YOUR_NC_URL/index.php/apps/oauth2/api/v1/token',
        'access_token_params': None,
        'refresh_token_url': None,
        'authorize_url': 'https://YOUR_NC_URL/index.php/apps/oauth2/authorize',
        'api_base_url': None, # have never seen this option...
        'client_kwargs': None
    }
}

免责声明: 我从未使用过 django(也没有 python),但我使用了一些带有 NC 的 OAuth 客户端,效果很好。唯一的问题是,我从来不需要输入 api_base_url,所以我将其设置为上面的 None,因为文档指出 [e]very key value pair can be omit.

在这种情况下,我是否将 OAuth 与 OpenID 混淆了?

不,不是真的。 OAuth 正是为您所想而生,并被 许多 NC 应用程序使用,而 OpenID 位于 OAuth(和 JWT)之上。