Приложение Electron иногда пытается войти в систему с помощью устаревшего маршрута Oauth. - PullRequest
3 голосов
/ 05 ноября 2019

У нас есть мультиплатформенное приложение (веб, Electron для настольных компьютеров, приложения для iOS и Android). При аутентификации через наше приложение Electron некоторые из наших пользователей перенаправляются на устаревший маршрут аутентификации (https://accounts.google.com/signin/oauth/legacy/approval), а не на стандартный маршрут аутентификации (https://accounts.google.com/signin/oauth/consent/approval).). Этот устаревший маршрут аутентификации не завершает авторизацию, поэтому наши пользователине могут войти в наше приложение. Это видят только наши пользователи Electron. Впервые мы увидели это 16 октября, и это стало более частым примерно 28 октября.

Это происходит, когда мы открываем окно электронного браузера ипосетите https://accounts.google.com/o/oauth2/v2/auth со стандартными параметрами. Если мы копируем тот же 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». На веб-сайтах и ​​других платформах вход в системузаканчивается правильно.

1 Ответ

2 голосов
/ 14 ноября 2019

Мы справились с этим, просто убрав Electron из пользовательского агента. В вашем случае это, вероятно, было бы что-то вроде этого.

authWindow.loadURL(authUrl, {
  userAgent: navigator.userAgent.replace(/ Electron\/\S+ /g, ' ');
});

Не объясняет, почему Google делает это, но в то же время обходит это.

...