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