第三方用户Auth与Electron

Orb*_*bit 6 authentication node.js oauth-2.0 electron

我一直在寻找有关如何在Electron App中实现用户身份验证的资源.

我想利用像Github这样的第三方服务来允许用户登录和注册.使用"常规"Node.js应用程序,我可能会使用passport.js或类似的东西来实现它.

我的困惑之所以出现是因为Electron应用程序是客户端的,所以在客户端代码中使用客户端密钥这样的东西似乎是错误的.那么在Electron应用程序中实现第三方用户身份验证的过程是什么?

Krz*_*pka 3

将电子应用程序视为标准浏览器页面。然后你将拥有标准的 oauth2 流程。

首先,您需要中间件服务器,您将在其中存储第三方服务的 clientId 和 clientSecret。

您需要在电子应用程序和中间件服务器之间创建类似会话的内容(下面我将展示示例)。

下面我将展示授权github的示例流程。

您需要使用https。

假设您的中间件服务器在 example.com 上可用。您至少需要两个端点:

  1. 获取: https: //example.com/initAuth/
  2. 获取: https: //example.com/oauth/token

Github client_id 和 client_secret 仅存储在该服务器中。

您的电子应用程序将 GET 请求发送到https://example.com/initAuth/. 并且您的服务器应该生成两个 uuid。应该成对存储(例如在 redis 中)。第一个 uuid 用于state授权 github 链接中的参数,第二个 uuid 作为简单会话/令牌来识别您的电子应用程序。你的服务器应该构建 github 访问的 url github 访问 GET https://github.com/login/oauth/authorize 在哪里

  1. redirect_uri将是您的第二个端点 - https://example.com/oauth/token
  2. state将是您的第一个 uuid
  3. 其他参数如常。

现在,您从此端点返回到电子会话/令牌 uuid 和构建的 url。

您的电子显示链接与 target="_blank" - 它应该在单独的选项卡/窗口中打开。Electron 应该记住会话/令牌 uuid。

当用户单击链接时,他将进入 oauth 流程,并接受您的应用程序。然后他将被重定向到您的中间件服务器第二个端点(https://example.com/oauth/token

您的服务器将进入此端点codestate. 您的服务器应该检查它是否已使用此注册电子应用程序state。如果它存在,那么服务器需要交换code(我不会解释它 - 这是标准的 oauth 流程)client_secretaccess_token现在将其存储在临时存储(redis)access_token 和两个 uuid 中。作为响应,使用脚本渲染 html 视图,该脚本将关闭此选项卡或只是带有一些消息的普通 html 视图。

您的电子应用程序需要知道中间件服务器是否具有 access_token。

  1. Electron 可以通过发送到第三个端点会话/令牌 uuid 来轮询中间件服务器。如果有access_token,服务器将返回它。
  2. 您可以使用网络套接字
  3. 您的主窗口可以检查第二个“oauth”窗口是否关闭,然后向中间件服务器发送请求以获取 access_token。

或者,您也可以将 access_token 存储在您的中间件服务器中,您的 Electron 不会向 github 发送请求,而只会向您的服务器发送请求,您的服务器将向 github 发送请求,并将响应返回到 Electron。