第三方用户Auth与Electron

时间:2016-10-15 00:10:05

标签: node.js authentication oauth-2.0 electron

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您需要使用https。

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

  1. 获取:https://example.com/initAuth/
  2. 获取:https://example.com/oauth/token
  3. Github client_id和client_secret仅存储在此服务器中。

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

    1. redirect_uri将成为您的第二个终点 - https://example.com/oauth/token
    2. state将是您的第一个uuid
    3. 其他参数照例。
    4. 现在您从此端点返回电子会话/令牌uuid和构建的URL。

      您的电子节目链接与target =" _blank" - 它应该在separe标签/窗口中打开。电子应该记住会话/令牌uuid。

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

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

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

      1. 电子可以通过发送到第三端点会话/令牌uuid来轮询时间中间件服务器。如果有access_token服务器将返回它。
      2. 您可以使用websockets
      3. 您的主窗口可以检查第二个" oauth"窗口关闭,然后将请求发送到中间件服务器以获取access_token。
      4. 或者您可以将access_token存储在中间件服务器中,您的电子不会向github发送请求,只会向您的服务器发送请求,您的服务器会向github发送请求,并且响应将返回电子。