第三方用户使用电子validation

我一直在寻找如何在电子应用程序中实现用户身份validation的资源。

我想利用Github等第三方服务来允许用户login和注册。 有了一个“常规”的Node.js应用程序,我可能会利用像passport.js或类似的东西来实现这一点。

我的困惑是因为电子应用程序是客户端,所以像客户端代码中的客户端密钥似乎是错误的。 那么在电子应用程序中实现第三方用户身份validation的过程是什么?

将电子应用程序视为标准的浏览器页面。 那么你将有标准的oauth2stream量。

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

你需要创build类似电子应用和中间件服务器之间的会话(下面我将举例说明)。

下面我将举例说明如何授权github。

你需要使用https。

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

  1. GET: https : //example.com/initAuth/
  2. GET: https : //example.com/oauth/token

Github client_id和client_secret只存储在这个服务器上。

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

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

现在你从这个端点返回到电子会话/令牌uuid并build立了url。

你的电子显示链接与目标=“_ blank” – 它应该打开在分离标签/窗口。 电子应记住会话/令牌uuid。

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

您的服务器将获得此端点codestate 。 我们的服务器应该检查它是否已经注册了这个state电子应用程序。 如果存在,那么服务器需要exchange_token的交换codeclient_secret (我不会解释它 – 这是标准的oauthstream)。 现在将其存储在临时存储(redis)access_token和两个uuid中。 并作为响应呈现与脚本的HTML视图将closures此选项卡或只是正常的HTML视图与一些消息。

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

  1. 电子可以通过发送到第三端点会话/令牌uuid来轮询中间件服务器的时间。 如果有access_token服务器将返回它。
  2. 你可以使用websockets
  3. 您的主窗口可以检查第二个“oauth”窗口是否closures,然后向中间件服务器发送access_token请求。

或者,您可以将access_token存储在您的中间件服务器中,您的电子将不会向github发送请求,而只会向您的服务器发送请求,并且您的服务器将向github发送请求,并回复给电子。