Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка двухфакторной авторизации #4

Closed
pozitronik opened this issue May 2, 2016 · 46 comments
Closed
Assignees
Milestone

Comments

@pozitronik
Copy link
Owner

Надо разобраться, как определять запрос на двухфакторную авторизацию, и что отправлять в этом случае.

@VecH
Copy link

VecH commented Sep 21, 2016

No master password entered yet
CONNECT xech2x@mail.ru
Login to xech2x@mail.ru
Requesting auth token for xech2x@mail.ru
Error getting auth token for xech2x@mail.ru

Включена двухфакторка
Сгенерировал пароль для внешнего приложения (что бы не запрашивало код от двухфакторки)
Все равно не входит

@mihavxc
Copy link

mihavxc commented Oct 23, 2016

Стоит ли ожидать в ближайшие месяцы появление этого функционала?

@pozitronik
Copy link
Owner Author

Задача в приоритете, но пока завал на работе.

@mihavxc
Copy link

mihavxc commented Jan 25, 2017

Есть ли какой-то прогресс по этой задаче?

@pozitronik
Copy link
Owner Author

Незначительный пока.

@pozitronik
Copy link
Owner Author

pozitronik commented Feb 26, 2017

Наконец, разобрался.
При двухфакторке делаем стандартный запрос на http://auth.mail.ru/cgi-bin/auth (обязательно: multipart/form-data), в ответ вернётся страница, в содержимом которой нас интересует параметр csrf. Также важно, чтобы установилась кука secstep.
На втором шаге на https://auth.mail.ru/cgi-bin/secstep нужно передать логин в формате логин@домен, csrf и пришедший на телефон код. При этом кука secstep также проверяется и уничтожается. Вместо телефонного кода можно ввести один из одноразовых кодов, заранее сгенерированных в личном профиле.
Основных затыка было два: secstep требует определённого формата логина (в то время, как на первом шаге домен определяется автоматически); после запроса смс таймаут до следующего запроса прогрессивно увеличивается, что затрудняло эксперименты.

В ближайшее время впилю фичу.

@4ingiz
Copy link

4ingiz commented Mar 19, 2017

Когда впилить планируете?

@pozitronik
Copy link
Owner Author

Три недели назад. Но дел невпроворот навалилось, приходится опять откладывать.

@EugeneFlash
Copy link

Можно ли будет использовать постоянный пароль для приложения вместо смс-кодов?

@pozitronik
Copy link
Owner Author

pozitronik commented Mar 20, 2017

Можно ли будет использовать постоянный пароль для приложения вместо смс-кодов?

Пока ничего обещать не могу, всё зависит от наличия свободного времени.

@viltorcheg
Copy link

viltorcheg commented Mar 24, 2017

А возможно ли сделать в дальнейшем при двухфакторке один пароль в настройках почты для приложений, что бы каждый раз не вводить ответ от СМС!
Настройка двухфакторного входа по ссылке, там же можно и настроить пароль для внешних приложений!
https://e.mail.ru/settings/2-step-auth

Пароли для внешних приложений

Пароль для приложения — это специальный код, который необходим для корректной работы вашего почтового клиента или стороннего приложения (The Bat!, Outlook или почтовое приложение в iPhone). Код требуется ввести в приложение вместо пароля от почтового ящика при первом входе в Почту.

@pozitronik
Copy link
Owner Author

Предыдущий ответ как раз про это.

@viltorcheg
Copy link

Тогда все будем ждать этой фичи) А так крутой плагин к тоталкомандеру)

@dnd99
Copy link

dnd99 commented May 5, 2017

Добрый день. Есть ли новости по двухфакторной авторизации?

@pozitronik
Copy link
Owner Author

Не могу заставить её работать на Delphi, хотя в php-варианте всё работает, как ожидается. Копаюсь.

@dnd99
Copy link

dnd99 commented May 5, 2017

Обнадеживающая информация, спасибо. Ждем с нетерпением )

@pozitronik
Copy link
Owner Author

Ну ровно так оно и было в феврале, так что сильно обнадёживаться не стоит.

@pozitronik
Copy link
Owner Author

Возможно, кто-то поможет разобраться. С помощью WireShark мне удалось найти разницу в теле запросов, которые формируют Indy (авторизация не срабатывает) и cURL (авторизация срабатывает, код например). Вот они наглядно:
multipart

Indy по умолчанию добавляет заголовки Content-Type и Content-Transfer-Encoding. При этом Content-Transfer-Encoding убрать можно (см. тут), а Content-Type в любом случае добавляется, хотя, судя по всему, совершенно не обязателен.

Я ещё продолжу экспериментировать - как минимум, попробую перекрыть обязательность заголовков в TIdMultipartFormDataStream, либо буду формировать тело запроса самостоятельно. Но проблема вообще может быть не в этом - оба запроса, несмотря на различия, выглядят корректными.

@pozitronik
Copy link
Owner Author

Рабочий curl-запрос, который нужно воспроизвести:
curl -v -L -b -X POST -F "Login=login" -F "Domain=domain" -F "Password=password" https://auth.mail.ru/cgi-bin/auth

Для отладки можно адресоваться на http-адрес, это тоже работает.

pozitronik added a commit that referenced this issue May 9, 2017
@pozitronik
Copy link
Owner Author

Проблема решена. Дело оказалось в методе редиректа, используемом страницей авторизации, добавление опции hoTreat302Like303 в TIdHTTP помогло.

@viltorcheg
Copy link

Спасибо что разобрались!
У меня не получается включить двухфакторную! Вызывается ошибка и приложение тоталкомандер крашится(((
Вопрос: пароль ставим в настройках на сайте для внешних приложений или свой?

@pozitronik
Copy link
Owner Author

pozitronik commented May 9, 2017

По порядку: какова последовательность действий, вызывающих ошибку? Маловероятно, что переключение галочки ведёт к проблеме.

Вопрос: пароль ставим в настройках на сайте для внешних приложений или свой?

Вопрос непонятен. Если речь о том, какой пароль указывать плагину - пароль от аккаунта. Если про код авторизации, то идём в настройки аккаунта, привязываем телефон, включаем двухфакторную авторизацию, подтверждаем пришедшим на телефон кодом. При следующих попытках авторизации на телефон будут приходить коды, которыми надо будет подтверждать учётку, вот их и указываем.

@viltorcheg
Copy link

Делаю чекбокс активным Двойная аутификация, после этого производится креш!
А когда не активный чекбокс, то пишет ошибку: error: getting auth token for (мой аккаунт)

@pozitronik
Copy link
Owner Author

Не могу воспроизвести.
Собственно, обработчика на чекбоксе никакого нет, состояние сохраняется только при нажатии "Add/Apply". Т.е. падать там просто нечему.

@viltorcheg
Copy link

Хорошо, приведу пример в моем видео!
https://youtu.be/a-E2NQ7U7bo

@pozitronik
Copy link
Owner Author

Ну а зачем тогда ты писал, что крешится после выставления галочки? Была просьба подробно привести последовательность действий, по написанному понять проблему нельзя. Видео лучше, хотя пока тоже непонятно.

@pozitronik
Copy link
Owner Author

pozitronik commented May 10, 2017

Войти в аккаунт без двухфакторки (и при снятой галочке, естественно) получается? Вероятно, падение никак не связано именно с этим функционалом.

UPD: воспроизвелось на второй машине, есть куда копать.
UPD2: из тестовой ветки в мастер попал отладочный код, вот он и вызывает проблемы. Поправлю.

@pozitronik
Copy link
Owner Author

Исправлено.

@dnd99
Copy link

dnd99 commented May 10, 2017

Огромное спасибо за работу в этом направлении.
Скачал сегодняшнюю версию плагина. При попытке подключения получаю ошибку:

CONNECT \aaa
Login to aaa@mail.ru
Requesting auth token for aaa@mail.ru
error: getting auth token for aaa@mail.ru

Причем галка "Two-step authentication" никак не влияет на результат. Независимо от ее состояния итог один и тот же.
Я что-то не так сделал или у меня не работает по какой-то объективной причине?

@pozitronik
Copy link
Owner Author

Обновись сейчас и проверь.
Мне нужно будет содержимое лога, плюс посмотри, меняется ли в MailRuCloud.ini состояние ключа twostep_auth после переключения галочки и нажатия Add/Apply.

@dnd99
Copy link

dnd99 commented May 10, 2017

Обновился, сделал две попытки подключения: с включенной галкой и с выключенной. Лог ниже:

CONNECT \aaa
Login to aaa@mail.ru
Requesting first step auth token for aaa@mail.ru
error: getting auth token for aaa@mail.ru
CONNECT \aaa
Login to aaa@mail.ru
Requesting auth token for aaa@mail.ru
error: getting auth token for aaa@mail.ru

В MailRuCloud.ini состояние ключа меняется корректно

@pozitronik
Copy link
Owner Author

Удаётся ли войти в аккаунт с отключённой двухфакторной авторизацией (и в облаке и в плагине)?

@dnd99
Copy link

dnd99 commented May 10, 2017

Отключил двухфакторную авторизацию. Войти в плагине не удается, в облаке вхожу без проблем.
Та же самая ошибка
CONNECT \aaa
Login to aaa@mail.ru
Requesting auth token for aaa@mail.ru
error: getting auth token for aaa@mail.ru

Переустановил плагин с нуля из последнего стабильного релиза. Результат без изменений, не соединяется с той же самой ошибкой.
Где-то месяц назад, до включения на аккаунте двухфакторной авторизации все работало. С тех пор сам тотал не трогал. Возможно ставились обновления windows. Больше не знаю что еще могло поменяться

@pozitronik
Copy link
Owner Author

Значит, ошибка на двухфакторку не завязана, но странно, что подробности ошибки не попали в лог. Я добавил кое-какую обработку ошибок, просьба обновиться из master, и повторить попытку входа, лог - сюда.

@viltorcheg
Copy link

Обновил из мастера!!!
Теперь все работает, выводится окошко для ввода кода из СМС!
Как то не удобно все это вводить, хотелось как в браузере, при входе нажимаешь на галочку запомнить это устройство, или же придумать пароль для приложений в настройках на сайте "Пароли для внешних приложений", что бы каждый раз не вводить СМС при входе! Возможно в будущем как то разберешься с этим))) Было бы круто) А так молодец, очень классный плагин)

@pozitronik
Copy link
Owner Author

pozitronik commented May 10, 2017

Ну отлично, что у кого-то заработало.

Как то не удобно все это вводить

Так в этом и смысл двухфакторки. Неудобно, зато надёжно.

"Пароли для внешних приложений"

Может позже.

@dnd99
Copy link

dnd99 commented May 10, 2017

Обновился из master. Авторизация заработала!

Включил в аккаунте двухфакторную авторизацию. Дальше есть два варианта:

  1. Указываю основной пароль от аккаунта - плагин работает, ошибок нет.
  2. Указываю сгенеренный "пароль для внешних приложений" - не работает, ошибка такая:
    CONNECT \aaa
    Login to aaa@mail.ru
    Requesting first step auth token for aaa@mail.ru
    Parsing authorization data...
    error: parsing authorization data

Пользоваться можно и это главное, спасибо за помощь. Готов указывать основной пароль. Но если есть силы и желание можем продолжить с пунктом 2.

ПС. Сорри, прочитал предыдущий отзыв позже, чем написал свой. Про пункт 2 все понятно.

@pozitronik
Copy link
Owner Author

Обновился из master. Авторизация заработала!

Интересно, ведь должна была работать и предыдущая версия - в обновлении изменено только протоколирование.

@viltorcheg
Copy link

Посмотри:
При входе в двухфакторку в плагине тотала, выходит автоматически из браузера хром юзер! Так должно быть?
И еще один баг: error: parsing authorization data
Это когда я добавляю на сайте в настройках двухфакторки: Мобильное приложение Код Доступа Mail.Ru, что бы вводить коды из приложения!
При следующем входе выводит эту ошибку! Когда удаляю это приложение из сайта, то нормально заходит с окошком ввода СМС кода!
Если что могу тимвивер дать свой, что бы ты посмотрел что и да как, так же все бы объяснил!

@pozitronik
Copy link
Owner Author

При входе в двухфакторку в плагине тотала, выходит автоматически из браузера хром юзер! Так должно быть?

Зависит от настроек аккаунта, см. запрет параллельных сессий.

Это когда я добавляю на сайте в настройках двухфакторки: Мобильное приложение Код Доступа Mail.Ru, что бы вводить коды из приложения!

Надо смотреть. Я не проверял с кодами мобильного приложения, только через SMS.

@viltorcheg
Copy link

Все правильно, стояла галочка "Запрет паралельных сессий"
У меня один раз пропустило с кодом от приложения, но потом со следующим входом, выводило эту ошибку парсинга!
Надо как то разбираться с этим! Или же остаться на СМС-ках, и то бывает если много раз заходить, не приходить сообщения, тупо молчок)

@dnd99
Copy link

dnd99 commented May 10, 2017

Интересно, ведь должна была работать и предыдущая версия - в обновлении изменено только протоколирование.

У меня объяснения этому нет. В прошлые разы при обновлении плагина/настроек выполнял те же самые действия.

@GeekDenCode
Copy link

CONNECT \MerDenchik
Login to deniska_sh@mail.ru
Requesting auth token for deniska_sh@mail.ru
EIdOSSLCouldNotLoadSSLLibrary ошибка с сообщением: Could not load SSL library. при отправке данных на адрес https://auth.mail.ru/cgi-bin/auth?from=splash
error: getting auth token for deniska_sh@mail.ru

Я уверен, что пароль правильный. Что такое? Не могу войти.

@raddyst
Copy link

raddyst commented May 10, 2017

Could not load SSL library.

Не может загрузить libeay32.dll ssleay32.dll - они есть в каталоге плагина?

@pozitronik
Copy link
Owner Author

@MerDenchik, прочтите документацию.

@pozitronik
Copy link
Owner Author

Добавлена возможность авторизации по коду из мобильного приложения. Этот способ исключает получение кода по смс - если подключен аутентификатор, смски приходить не будут.
Возможности авторизоваться кодом для приложения не будет - плагин симулирует работу браузера, эта возможность тут не подходит.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants