与自定义Web应用程序共享nextcloud身份验证

时间:2019-05-11 11:18:43

标签: node.js authentication vue.js nextcloud cross-application

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

我在网络上做了一些研究,但是我没有找到有关如何做的简单解释……可能吗?

奥利维尔

1 个答案:

答案 0 :(得分:0)

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

  1. 在nextcloud实例中创建一个自定义应用程序,您的网站会将用户重定向到该应用程序。然后,所述定制应用程序(在nextcloud内成功认证之后)将使用访问令牌(例如,作为GET url查询参数)将用户重定向回您的应用程序。然后,您网站的后端将向自定义应用托管的请求和API端点发送请求,以确定接收到的令牌的有效性(不建议,稍后我会解释原因)。
  2. 向用户询问其nextcloud登录凭据,并尝试login via IMAP, SMB or FTP以确定提供的凭据的有效性。不建议使用此选项,因为它要求用户将其凭据公开到您网站的后端。
  3. 使用一种类似于1)的方法,而无需重新发明轮子-多亏Nextcloud supports external authentication via OAuth 2.0

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

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

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

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

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

User provisioning API将帮助您在node.js中创建Webiste的后端。在您的情况下,使用者是您的网站,服务提供商是您的nextcloud实例。

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