我一直在寻找有关如何在Electron App中实现用户身份验证的资源。
我想利用像Github这样的第三方服务来允许用户登录和注册。使用“常规”Node.js应用程序,我可能会使用passport.js或类似的东西来实现它。
我的困惑之所以出现是因为Electron应用程序是客户端的,所以在客户端代码中使用客户端密钥这样的东西似乎是错误的。那么在Electron应用程序中实现第三方用户身份验证的过程是什么?
答案 0 :(得分:1)
将电子应用视为标准浏览器页面。 然后你将有标准的oauth2流程。
首先,您需要中间件服务器,您将在其中存储clientId和clientSecret以用于第三方服务。
您需要创建类似电子应用和中间件服务器之间的会话(下面我将展示示例)。
下面我将展示授权github的示例流程。
您需要使用https。
让我们假设您的中间件服务器在example.com上可用。您至少需要两个端点:
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
redirect_uri
将成为您的第二个终点 - https://example.com/oauth/token state
将是您的第一个uuid 现在您从此端点返回电子会话/令牌uuid和构建的URL。
您的电子节目链接与target =" _blank" - 它应该在separe标签/窗口中打开。电子应该记住会话/令牌uuid。
当用户点击链接时,他将进入oauth流程,接受您的应用。然后他将被重定向到您的中间件服务器第二端点(https://example.com/oauth/token)
您的服务器将进入此端点code
和state
。您的服务器应该检查它是否已使用此state
注册了电子应用程序。如果它存在,那么服务器需要交换code
和client_secret
access_token
(我不会解释它 - 这是标准的oauth流程)。
现在将它存储在临时存储(redis)access_token和两个uuid中。
并且响应使用脚本呈现html视图,该脚本将关闭此选项卡或仅显示带有某些消息的普通html视图。
您的电子应用需要知道中间件服务器是否具有access_token。
或者您可以将access_token存储在中间件服务器中,您的电子不会向github发送请求,只会向您的服务器发送请求,您的服务器会向github发送请求,并且响应将返回电子。