Electron应用程序有时尝试使用传统Oauth路由登录用户

Electron应用程序有时尝试使用传统Oauth路由登录用户,electron,google-oauth,Electron,Google Oauth,我们有一个多平台应用程序(web、Electron for desktop、iOS和Android应用程序)。当通过我们的电子应用程序进行身份验证时,我们的一些用户被转发到传统的身份验证路由( )而不是标准的身份验证路由()。此传统身份验证路由无法完成授权,因此我们的用户无法登录到我们的应用程序。只有我们的电子用户看到了这一点。我们在10月16日第一次看到这种情况,在10月28日左右变得更加频繁 当我们打开电子浏览器窗口并访问 使用标准参数。如果我们将相同的URL和参数复制到非电子浏览器窗口中,

我们有一个多平台应用程序(web、Electron for desktop、iOS和Android应用程序)。当通过我们的电子应用程序进行身份验证时,我们的一些用户被转发到传统的身份验证路由( )而不是标准的身份验证路由()。此传统身份验证路由无法完成授权,因此我们的用户无法登录到我们的应用程序。只有我们的电子用户看到了这一点。我们在10月16日第一次看到这种情况,在10月28日左右变得更加频繁

当我们打开电子浏览器窗口并访问 使用标准参数。如果我们将相同的URL和参数复制到非电子浏览器窗口中,我们将被发送到标准身份验证路由

以下是我们的电子Oauth代码的相关部分:

      const authParams = {
        access_type: opts.offline ? 'offline' : undefined,
        response_type: 'code id_token',
        redirect_uri: 'http://localhost/authenticate',
        scope: expandedScopes.join(' '),
        client_id: xxxx,
        prompt: 'consent',
        login_hint: opts.email ? opts.email : undefined,
        nonce
      }

      const authParamStr = queryStringify(authParams)
      const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?${authParamStr}`
      authWindow.loadURL(authUrl)

发生的情况是,Oauth同意流的最后一个屏幕不是经过正确的身份验证,而是一个标题为“Approved Clicked”的白色屏幕。在web和其他平台上,登录将正确完成。

我们只需从用户代理中剥离Electron即可解决此问题。你的情况可能是这样的

authWindow.loadURL(authUrl, {
  userAgent: navigator.userAgent.replace(/ Electron\/\S+ /g, ' ');
});
这并不能解释谷歌为什么这么做,但同时也绕开了它