将电子应用程序视为标准浏览器页面。
然后您将拥有标准的 oauth2 流程。
首先,您需要中间件服务器,您将在其中存储用于第三方服务的 clientId 和 clientSecret。
您需要在电子应用程序和中间件服务器之间创建类似会话的东西(下面我将展示示例)。
下面我将展示授权github的示例过程。
你需要使用 https。
假设您的中间件服务器在 example.com 上可用。您至少需要两个端点:
- 获取:https://example.com/initAuth/
- 获取:https://example.com/oauth/token
Github client_id 和 client_secret 只存储在这个服务器中。
您的电子应用程序将 GET 请求发送到 https://example.com/initAuth/。
你的服务器应该生成两个 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" - 它应该在单独的选项卡/窗口中打开。 Electron 应该记住 session/token uuid。
当用户单击链接时,他将进入接受您的应用程序的 oauth 进程。然后他会被重定向到你的中间件服务器第二个端点(https://example.com/oauth/token)
您的服务器将进入此端点code 和state。你的服务器应该检查它是否已经用这个state 注册了电子应用程序。如果它存在,那么服务器需要将code 和client_secret 交换为access_token(我不会解释它——这是标准的oauth 流程)。
现在将其存储在临时存储 (redis) access_token 和两个 uuid 中。
并且作为响应呈现带有脚本的 html 视图,该脚本将关闭此选项卡或只是带有一些消息的普通 html 视图。
您的电子应用需要知道中间件服务器是否有 access_token。
- Electron 可以通过发送到第三端点会话/令牌 uuid 来轮询中间件服务器。如果有 access_token 服务器会返回它。
- 您可以使用 websockets
- 您的主窗口可以检查第二个“oauth”窗口是否关闭,然后向中间件服务器发送访问令牌请求。
或者,您也可以将 access_token 存储在中间件服务器中,您的电子不会向 github 发送请求,而只会向您的服务器发送请求,您的服务器会将请求发送到 github,然后响应返回给电子。