Google 登录通常青睐主流浏览器,因此到目前为止,要使其在 Electron 上运行,您需要将
userAgent
字符串更改为 Chrome。然而,在上周收到用户的报告后,我发现这不再有效了。
使用以下代码打开 Google 登录 URL:
const win = new BrowserWindow({
height: 600,
width: 800
})
const client = new google.auth.OAuth2(
clientId, clientSecret, "urn:ietf:wg:oauth:2.0:oob"
)
const url = client.generateAuthUrl({
access_type: "offline",
scope: scopes
})
win.loadURL(url, {
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52"
})
这仍然会产生
This browser or app may not be secure
错误并阻止 Google 登录工作。
我希望有一个解决方案可以让 Google 登录再次在 Electron 上运行。
可能有一些技巧可以解决这个问题,但它们最终很可能会被谷歌阻止。他们确实在 Google 开发者博客中对此进行了提示:
正确的解决方案是按照 “RFC8252:OAuth 2.0 for Native Apps”的要求,使用用户的默认浏览器进行 OAuth2 授权流程 UI(而不是自定义 WebView 弹出窗口):
来自本机应用程序的 OAuth 2.0 授权请求只能是 通过外部用户代理(主要是用户的浏览器)进行。 该规范详细说明了安全性和可用性原因 在这种情况下,本机应用程序和授权服务器可以如何 实施此最佳实践。
这样做的一个很好的原因是,用户可能已经在默认浏览器中通过 Google 进行了身份验证,因此他们不必再次输入密码/通过 MFA 流程。他们只会看到针对您的特定应用程序的授权请求,他们可能会决定批准或拒绝该请求。
另一个很好的理由是他们可以使用自己选择的密码管理器,该管理器很可能适用于他们的默认浏览器,但不适用于您的 Electron 应用程序。
解决 Electron JS 桌面应用程序中的 Google 登录问题在此处输入图像描述
发现正确的重定向 URL:
当将正确的重定向 URL 识别为 “urn:ietf:wg:oauth:2.0:oob”,实现顺利的 Google 登录。 5. 存储访问令牌和凭证详细信息:
登录成功后,采取措施将 Go
enter code here
ogle 访问令牌安全地存储在本地存储中,并将凭据详细信息存储在 JWT 令牌中,以增强安全性。
6. 利用重定向 URL 获得成功:
利用“urn:ietf:wg:oauth:2.0:oob”URL,Electron 应用程序 配置为在 Google 登录后成功重定向,确保 无缝的用户体验。
结论:
解决 Electron JS 桌面应用程序中的 Google 登录错误需要进行彻底的研究、确定正确的配置并确保访问令牌的正确存储。这一历程凸显了坚持不懈和全面解决问题对于克服发展挑战的重要性。分享此经验旨在帮助其他开发人员在其 Electron 应用程序项目中解决类似问题。 #Electron #GoogleLogin #身份验证 #DevelopmentChallenges