1

我想开发一个使用 nextcloud 用户帐户的应用程序(NodeJS、vueJS、postgreSQL)。这个想法是用户使用他的 nextcloud ID 进行身份验证,然后可以访问 nextcloud 和我的网站。请注意,我的应用程序不是 nextcloud 模块或 nextcloud 应用程序。这是一个完整的网站,但我想基于 nextcloud 来识别用户

我在网上做了一些研究,但我没有找到一个简单的解释来说明如何去做……这可能吗?

奥利维尔

4

1 回答 1

2

您可以采用几种不同的方法通过 nextcloud 实例中的帐户对外部应用程序的用户进行身份验证。这些包括:

  1. 在您的 nextcloud 实例中创建一个自定义应用程序,您的网站会将用户重定向到该应用程序。然后,所述自定义应用程序将(在 nextcloud 内成功验证后)使用访问令牌(例如作为 GET url 查询参数)将用户重定向回您的应用程序。然后,您网站的后端将向自定义应用程序托管的 API 端点发送请求,以确定接收到的令牌的有效性(不推荐,我将在稍后解释原因)。
  2. 询问用户他们的 nextcloud 登录凭据并尝试通过 IMAP、SMB 或 FTP 登录,以确定所提供凭据的有效性。不推荐使用此选项,因为它要求用户将其凭据公开给您网站的后端。
  3. 使用类似于 1) 的方法,无需重新发明轮子 - 这要归功于Nextcloud 通过 OAuth 2.0 支持外部身份验证这一事实

使用 OAuth 2.0 将允许您的网站通过您的 nextcloud 实例在外部对用户进行身份验证。

以下是在您的情况下的工作方式:

  1. 您的网站将用户重定向到 nextcloud 实例 ( ) 的 OAuth 授权端点(可以通过纯链接完成),nextcloud-instance-address/index.php/apps/oauth2/authorize同时使用客户端标识符标识自己
  2. Nextcloud 实例负责身份验证(用户会看到一个常规登录屏幕,其中包含有关您的网站想要访问其帐户的事实的附加信息)
  3. 成功登录后,nextcloud 实例会生成一个请求令牌并将用户重定向回您的网站(到指定的重定向 URI
  4. 您的网站检索请求令牌(它通过重定向 URI获取)并使用Client secret key将其发送到 Nextcloud 实例的令牌端点 ( your-instance-address/index.php/apps/oauth2/api/v1/token) 。您的网站获取访问令牌作为响应。
  5. 您的网站现在可以使用访问令牌(作为不记名令牌)向nextcloud 实例的用户配置 API发出授权请求nextcloud-instance-address/index.php/ocs/v2.php/cloud/user?format=json

将访问令牌存储在基于 cookie 的会话中是个好主意。

设置非常简单(至少在 nextcloud 实例一侧) - 您必须在 nextcloud 管理员帐户的管理员安全设置部分添加您的网站。您必须指定您的网站在成功登录后用于检索请求令牌的重定向 URI。客户端密钥和客户端标识符都将在 nextcloud 的管理面板中为您生成。

本教程将帮助您在 node.js 中创建 webiste 的后端。在您的情况下,消费者是您的网站,服务提供商是您的下一个云实例。

随意询问是否有不清楚的地方。祝你好运,编码愉快!

于 2019-05-18T17:32:15.370 回答