Нужно свою схему выдумывать, но это будет менее секурно, тк нужна связь между вторым фактором (телефоном) и сервером.
То есть нужно, что бы была просто кнопка "Подтвердить" и эти цифры отправлялись на IP адрес сервера.
Тут будут уже не цифры отправляться, а просто запрос с идентификатором сессии, которую нужно разрешить.
+ Это не стандартизировано и придётся делать своё приложение и свой протокол.
Обычно это выглядит так:
1. На каждую попытку входа создаётся уникальный токен, который выводится на экран компьютера при помощи QR-кода.
2. Пользователь открывает приложение на телефоне, где он уже залогинился (используя другой вариант второго фактора, типа тех же TOTP или sms)
3. В приложении сканирует этот код, приложение получает информацию об этой попытке входа с вашего сервера и демонстрирует пользователю (ip адрес, имя устройство, примерное местоположение).
4. В случае подтверждения пользователем - отправляет запрос на сервер, токен становится "подтверждённым"
5. Сервер отправляет в браузер уведомление о том, что вход разрешён и выдаёт уже рабочий токен. Успех.
(Используется в Steam, Discord, Telegram)
Второй вариант:
1. Пользователь вводит логин + пароль и выбирает в качестве второго фактора - приложение на телефоне, где он уже залогинен.
2. В приложение приходит уведомление о том, что совершена попытка входа, которую нужно подтвердить или отказать. Для дополнительной безопасности также может быть запрошено число, которое отображено на странице входа.
3. При подтверждении - попытка также подтверждается и в браузер отправляется уведомление.
Используется в сервисах MS, Github, Google
Оба варианта не отменяют TOTP, так как требуют как минимум одно уже авторизованное устройство.
но пользователи жалуются, что не удобно вбивать цифры из приложения с телефона.
Пользователи всегда будут жаловаться. Ещё больше они будут жаловаться, если они не смогут залогиниться в ваш сервис, когда у них нет связи на телефоне.