第三方用户使用电子validation
我一直在寻找如何在电子应用程序中实现用户身份validation的资源。
我想利用Github等第三方服务来允许用户login和注册。 有了一个“常规”的Node.js应用程序,我可能会利用像passport.js或类似的东西来实现这一点。
我的困惑是因为电子应用程序是客户端,所以像客户端代码中的客户端密钥似乎是错误的。 那么在电子应用程序中实现第三方用户身份validation的过程是什么?
将电子应用程序视为标准的浏览器页面。 那么你将有标准的oauth2stream量。
首先,您需要中间件服务器,您将在其中存储clientId和clientSecret以用于第三方服务。
你需要创build类似电子应用和中间件服务器之间的会话(下面我将举例说明)。
下面我将举例说明如何授权github。
你需要使用https。
让我们假设你的中间件服务器在example.com上可用。 您需要至less两个端点:
- GET: https : //example.com/initAuth/
- 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
-
redirect_uri
将是您的第二个端点 – https://example.com/oauth/token -
state
将是你的第一个uuid - 其他参数照常。
现在你从这个端点返回到电子会话/令牌uuid并build立了url。
你的电子显示链接与目标=“_ blank” – 它应该打开在分离标签/窗口。 电子应记住会话/令牌uuid。
当用户点击链接,他将进入oauth进程,他接受你的应用程序。 然后他将被redirect到您的中间件服务器的第二个端点( https://example.com/oauth/token )
您的服务器将获得此端点code
和state
。 我们的服务器应该检查它是否已经注册了这个state
电子应用程序。 如果存在,那么服务器需要exchange_token的交换code
和client_secret
(我不会解释它 – 这是标准的oauthstream)。 现在将其存储在临时存储(redis)access_token和两个uuid中。 并作为响应呈现与脚本的HTML视图将closures此选项卡或只是正常的HTML视图与一些消息。
您的电子应用程序需要知道中间件服务器是否具有access_token。
- 电子可以通过发送到第三端点会话/令牌uuid来轮询中间件服务器的时间。 如果有access_token服务器将返回它。
- 你可以使用websockets
- 您的主窗口可以检查第二个“oauth”窗口是否closures,然后向中间件服务器发送access_token请求。
或者,您可以将access_token存储在您的中间件服务器中,您的电子将不会向github发送请求,而只会向您的服务器发送请求,并且您的服务器将向github发送请求,并回复给电子。