Приложение Electron, использующее Google OAuth: «этот браузер или приложение может быть небезопасным» - PullRequest
3 голосов
/ 10 января 2020

Пользователь моего приложения сообщил сегодня о проблеме с авторизацией пользователя в Google (с использованием OAuth 2.0). До сих пор приложение открывало новое BrowserWindow (интеграция узлов отключена, сессия отделена от основного приложения). Вы можете увидеть реализацию здесь , поскольку библиотека OSS. Я использую это для авторизации пользователя для доступа к данным приложения на Google Диске. Сегодня после входа в систему я вижу следующее сообщение:

Возможно, этот браузер или приложение не защищены.

Попробуйте использовать другой браузер. Если вы уже используете поддерживаемый браузер, вы можете обновить sh свой экран и повторить попытку входа.

Ссылка для получения дополнительной информации содержит раздел для разработчиков. Этот раздел имеет 2 ссылки. Один из них - как обновить приложение до PWA. Поскольку приложение является инструментом тестирования API, его невозможно запустить в веб-браузере. Вторая ссылка указывает на документ, описывающий, как перейти к авторизации для собственного приложения. Однако описанный поток требует предоставления authorization_code. Это означает, что мне нужно включить секрет OAuth в свое приложение. Электронное приложение, тем не менее, все еще остается веб-приложением, и нет понятия о компиляции источников. Я бы раскрыл секрет клиента для публики c, которая не защищена. Потенциально я мог бы создать серверное приложение для его поддержки, но приложение - это проект OSS. У него нет средств для запуска сервера для авторизации.

Теперь у меня вопрос, как мне тогда реализовать OAuth 2 для приложения Electron. Я не могу использовать PWA, и процесс авторизации на сервере (предоставление кода) в этом случае далек от идеала.

Ответы [ 2 ]

6 голосов
/ 13 января 2020

Как объяснил Павел, смена пользовательского агента поможет. Тем не менее, вы можете легко установить пользовательский агент, передавая объект при загрузке URL

win = new BrowserWindow({width: 800, height: 600});
win.loadURL(authUrl, {userAgent: 'Chrome'})

Я проверил его, и он работал как шарм

1 голос
/ 10 января 2020

После предположения я решил изменить строку агента пользователя и удалить из нее имя приложения, а также Electron/ с версией. После этого изменения оно снова заработало.

Пример реализации:

const win = new BrowserWindow(params);
let ua = win.webContents.userAgent;
ua = ua.replace(/APPLICATION NAME HERE\/[0-9\.-]*/,'');
ua = ua.replace(/Electron\/*/,'');
win.webContents.userAgent = ua;

Предполагается, что приложение использует symver и никаких предварительных тегов. В противном случае вам придется немного настроить регулярное выражение.

...