Node.js 与自定义web应用程序共享nextcloud身份验证

Node.js 与自定义web应用程序共享nextcloud身份验证,node.js,authentication,vue.js,nextcloud,cross-application,Node.js,Authentication,Vue.js,Nextcloud,Cross Application,我想开发一个使用nextcloud用户帐户的应用程序(NodeJS、vueJS、postgreSQL)。这个想法是用户用他的nextcloud ID进行身份验证,然后可以访问nextcloud和我的网站。 请注意,我的应用程序不是nextcloud模块或nextcloud应用程序。这是一个完整的网站,但我想基于nextcloud来识别用户 我在网络上做了一些研究,但我没有找到一个简单的解释来说明如何做……有可能吗 Olivier为了通过nextcloud实例中的帐户验证外部应用程序的用户,您可以

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

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


Olivier

为了通过nextcloud实例中的帐户验证外部应用程序的用户,您可以采取几种不同的方法。这些措施包括:

  • 在您的nextcloud实例中创建一个自定义应用程序,您的网站会将用户重定向到该应用程序。然后,所述定制应用程序(在nextcloud内成功验证后)将用户重定向回您的应用程序,并使用访问令牌(例如作为GET url查询参数)。然后,您的网站后端将向自定义应用程序承载的API端点发送请求,以确定接收到的令牌的有效性(不推荐,我稍后将解释原因)
  • 询问用户的nextcloud登录凭据,并尝试登录以确定提供的凭据的有效性。不建议使用此选项,因为它要求用户向您的网站后端公开其凭据
  • 使用一种类似于1)的方法,而无需重新发明轮子——这要归功于以下事实:
  • 使用OAuth 2.0将允许您的网站通过nextcloud实例对用户进行外部身份验证

    以下是在您的案例中的工作方式:

  • 您的网站将用户重定向到nextcloud实例(
    nextcloud实例地址/index.php/apps/oauth2/authorize
    )的OAuth授权端点(可以通过普通链接完成),同时使用客户端标识符标识自身
  • Nextcloud实例负责身份验证(用户会看到一个常规登录屏幕,其中包含有关您的网站想要访问其帐户的其他信息)
  • 成功登录后,nextcloud实例生成一个请求令牌,并将用户重定向回您的网站(到指定的重定向URI)
  • 您的网站检索请求令牌(它通过重定向URI获取),并使用客户端密钥将其发送到下一个Tcloud实例的令牌端点(
    您的实例地址/index.php/apps/oauth2/api/v1/token
    )。您的网站获得访问令牌作为响应
  • 您的网站现在可以使用访问令牌(作为承载令牌)向您的nextcloud实例发出授权请求
    nextcloud实例地址/index.php/ocs/v2.php/cloud/user?format=json
  • 最好将访问令牌存储在基于cookie的会话中

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

    将帮助您在node.js中创建webiste的后端。在您的案例中,消费者是您的网站,服务提供商是您的nextcloud实例


    如果有什么不清楚的地方,请随时询问。祝你好运和快乐

    谢谢你!非常感谢您的完整回答:)我将尝试OAuth2解决方案