Продукт

Авторизация по звонку: вход в сервис без SMS и пароля

Авторизация звонком заменяет SMS-код на исходящий вызов: пользователь нажимает «Войти», звонит на показанный номер, вызов сбрасывается — и сессия открывается сама. Вводить и запоминать нечего, ждать доставки сообщения не нужно. Способ закрывает и обычный вход, и passwordless-сценарий без пароля, и подтверждение входа вторым фактором. Стоит 0,20 ₽ за успешную проверку, несостоявшаяся не тарифицируется.

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

Авторизация по звонку убирает четыре шага из пяти. Разбираем, как она устроена, где применима и что даёт по цифрам.

Способы авторизации по номеру телефона

Телефон как идентификатор давно вытеснил логин: он уникален, его не надо придумывать и его сложнее забыть. Различаются не идентификаторы, а способы доказать, что телефон ваш.

СпособЧто делает пользовательЧто подтверждаетСлабое место
Парольвспоминает и вводитзнание секретазабывают, переиспользуют, подбирают по утечкам
SMS-кодждёт, читает, вводитполучение сообщениядоставляемость, задержки, ошибки ввода
Push в приложениеподтверждает нажатиемдоступ к установленному приложениютребует приложения и работающих пушей
Звонок на выделенный номернажимает вызовисходящий вызов с этого номеранужен определяемый номер

У способов с телефоном общий принцип: подтверждается не знание, а владение. Разница в том, что именно считается доказательством владения — принятое сообщение или совершённый вызов.

Отдельно стоит сказать, чего в этом списке нет. Телефонная авторизация не заменяет и не отменяет пароль в сценариях, где нужен доступ без связи, и не превращает сервис в защищённый сам по себе. Это один слой из нескольких.

Как устроен вход по звонку

Со стороны пользователя всё выглядит как две кнопки. Со стороны системы — как короткий жизненный цикл проверки с тремя состояниями.

  1. Пользователь вводит номер и нажимает «Войти».
  2. Ваш бэкенд создаёт проверку: передаёт ключ проекта и номер в формате E.164. В ответ приходит идентификатор проверки и выделенный номер. Проверка получает статус PENDING.
  3. Фронтенд показывает выделенный номер ссылкой tel: и таймер на 60 секунд.
  4. Пользователь звонит. Отвечать не нужно — сервис фиксирует вызов и сбрасывает соединение. Звонок сопоставляется с проверкой по паре «выделенный номер + номер вызывающего абонента», проверка переходит в CONFIRMED.
  5. Бэкенд опрашивает статус проверки. Увидел CONFIRMED — открывает сессию и выдаёт токен. Увидел EXPIRED — предлагает позвонить ещё раз.

Ключевой момент для проектирования: сессия создаётся только на вашей стороне и только после подтверждения. Сервис проверки не выдаёт токенов и ничего не знает о вашей модели пользователей — он отвечает ровно на один вопрос, звонил ли этот номер. Поэтому вход по звонку встраивается в существующую аутентификацию как ещё один провайдер, а не как её замена.

Подробный разбор самого механизма проверки — в статье про подтверждение номера телефона звонком.

Авторизация без пароля

Passwordless-сценарий — тот случай, когда пароля у пользователя нет вообще. При регистрации он оставляет номер, при каждом входе подтверждает владение им. Хранить в базе нечего: нет хеша пароля, нет процедуры восстановления, нет писем со ссылкой сброса.

Это снимает целый класс задач:

  • Восстановление доступа исчезает как отдельный сценарий. Вход и восстановление становятся одним и тем же действием — подтвердить номер.
  • Нечего утекать. База без паролей не представляет ценности для перебора по другим сервисам.
  • Нет поддержки по забытым паролям. По статистике любой службы поддержки это заметная доля обращений.

Взамен появляется жёсткая зависимость: потерял доступ к номеру — потерял доступ к аккаунту. Поэтому passwordless разумен там, где номер и так является основным контактом — доставка, объявления, программы лояльности, — и рискован там, где аккаунт живёт годами и переживает смену телефона. В последнем случае нужен запасной канал: почта, резервные коды или второй привязанный номер.

Звонок как второй фактор

Если пароль остаётся, звонок работает вторым фактором. Схема стандартная: пользователь вводит логин и пароль, система создаёт проверку и просит позвонить, сессия открывается только после подтверждения.

По сравнению с другими вторыми факторами звонок находится примерно там же, где SMS-код: он подтверждает владение номером и наследует его слабости, включая подмену SIM-карты. Честное сравнение выглядит так — приложение-генератор одноразовых кодов надёжнее, но требует от пользователя установки и настройки, а телефон есть у всех. Звонок выигрывает не в стойкости, а в том, что через него проходят почти все пользователи, тогда как до настройки TOTP доходит меньшинство.

Тот же механизм закрывает и подтверждение отдельных действий — смену пароля, изменение реквизитов, крупную операцию. Разбор трёх сценариев целиком — в материале про подтверждение при регистрации, входе и операциях.

Вход по звонку на сайте и в приложении

Механизм один, интерфейс разный.

На сайте пользователь чаще всего сидит с десктопа, а звонит с телефона. Значит, номер нужно показать крупно и в удобном для набора виде, а не мелким моноширинным текстом. На мобильном браузере обязательна ссылка tel: — иначе номер придётся переписывать руками, и это худшая точка сценария. Детали реализации — в статье про подтверждение номера на сайте.

В приложении сценарий короче: набор открывается одним касанием через системный диалер, а после возврата в приложение статус уже подтверждён. Важное отличие от обычного flash call — приложению не нужны разрешения на чтение SMS или журнала вызовов, а их выдачу ограничивают и Google Play, и App Store. Подробности — в материале про подтверждение номера в мобильном приложении.

Что это даёт по цифрам

Считать эффект нужно в двух местах: на конверсии входа и на стоимости.

Конверсия. Из сценария уходят три шага, на которых теряются пользователи: ожидание сообщения, переключение в другое приложение и ручной ввод кода. Отдельно исчезает самая болезненная ситуация — сообщение не пришло вовсе, и пользователю нечего вводить. Сколько именно вы получите, зависит от вашей аудитории и текущей доставляемости, поэтому единственный честный способ — включить звонок как альтернативный способ входа и сравнить две воронки на своих данных.

Стоимость. Одна успешная авторизация — 0,20 ₽, абонентской платы нет. Тарифицируется только состоявшийся звонок: проверка, ушедшая в EXPIRED, не стоит ничего. В SMS-сценарии оплачивается отправка независимо от того, дошло сообщение и вошёл ли пользователь.

Входов в месяцСтоимость при 100 % дозвонаПри 80 % дозвона
5 0001 000 ₽800 ₽
50 00010 000 ₽8 000 ₽
200 00040 000 ₽32 000 ₽

Развёрнутое сравнение с SMS по шести параметрам — в материале flash call или SMS, критерии выбора провайдера — в разборе сервисов подтверждения номера. Актуальные цены — на странице тарифов.

Когда звонок не подходит

Раздел, без которого материал читался бы рекламой.

  • Пользователь за пределами России. Пул состоит из российских номеров, зарубежные абоненты сценарий не пройдут.
  • Скрытый номер. Антиопределитель или корпоративная АТС с подменой исходящего номера делают сопоставление невозможным.
  • Нет голосовой связи. Есть интернет, но нет сети оператора — например, зарубежная SIM с одним мобильным интернетом.
  • Требуется вход без телефона под рукой. Тут работает только пароль или резервные коды.

Практический вывод: звонок ставится основным способом, а SMS или пароль остаются запасным. Кнопка «Войти другим способом» рядом с таймером снимает почти все перечисленные случаи и заодно страхует от сбоя у любого одного провайдера.

Как подключить

  1. Зарегистрируйтесь и создайте проект — он получит собственный ключ.
  2. Добавьте в бэкенд создание проверки при нажатии «Войти» и опрос её статуса.
  3. Выдавайте токен сессии только по статусу CONFIRMED, обрабатывайте EXPIRED как повод предложить повторный вызов.
  4. Оставьте в интерфейсе запасной способ входа.

Инструкция с вашим ключом, запросами и форматами ответов открывается в кабинете на странице проекта сразу после регистрации.

Частые вопросы

Чем это лучше входа по паролю?

Не лучше и не хуже — это разные компромиссы. Пароль не зависит от связи и работает где угодно, но его забывают, переиспользуют между сервисами и подбирают по утечкам. Вход по звонку снимает эти три проблемы, но требует, чтобы телефон был под рукой и находился в зоне действия сети. Разумно давать оба способа.

Можно ли оставить пароль и добавить звонок вторым фактором?

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

Что происходит с сессией, пока пользователь звонит?

Ничего: до подтверждения сессии нет. Сервер держит проверку в статусе PENDING и выдаёт токен только после того, как звонок зафиксирован. Если за 60 секунд вызова не было, проверка становится EXPIRED, и вход не происходит.

Насколько это защищает от перехвата чужого аккаунта?

Ровно настолько, насколько защищён сам номер. Подтверждение владения телефоном не спасает от подмены SIM-карты — как и SMS-код. Если сценарий требует стойкости к таким атакам, звонок нужно дополнять другим фактором, а не заменять им всё.

Пользователь звонит каждый раз при входе?

Только когда нужна новая сессия. Дальше работает обычный токен с вашим сроком жизни, и повторная авторизация требуется по тем же правилам, что и раньше. Частоту вызовов определяет ваша политика сессий, а не сервис подтверждения.