Привязка телефона к аккаунту и авторизация сканированием QR кода

в 13:47, , рубрики: javascript, php, авторизация без паролей, мобильные устройства, метки: ,

Привет!
Сегодня меня посетила идея об альтернативной авторизации на сайтах при помощи привязанных к аккаунту мобильных девайсов.
Зачем это нужно?
Ну например, если пользователю лень вбивать пароли или для использования в двухфакторной авторизации, или для восстановления пароля и тд.
Собственно о способах применения данного механизма на продакшене я не задумывался. Основная цель — это реализация, а дальше посмотрим.

Немного теории

Как это должно выглядеть?

Для привязки и авторизации достаточно отсканировать своим устройством соответствующие QR коды:
1. На странице привязки
2. На странице авторизации

К чему привязаться?

Немного «погуглив», с печалью осознал, что нет возможности из веба узнать приватную (уникальную) информацию об устройстве. Ни тебе IMEI, ни серийного номера, ничего подобного.
Остается только следующее:
1. Долговечная кука, которая будет жить в браузере устройства.
2. IP адреса
3. Юзерагент

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

Механизм привязки

1. Генерируем ссылку и формируем QR код
2. Устройство сканирует код и переходит по ссылке
3. Собирается всевозможная информация об устройстве и сохраняется соответствие (устройство = пользователь)
4. На устройство вешаем куку.
5. В это время браузер «слушает» специальную ссылку и как только получен положительный ответ, отображает пользователю сообщение об успешной привязке.

Механизм авторизации

1. Генерируем ссылку и формируем QR код
2. Устройство сканирует код и переходит по ссылке
3. Собираем данные об устройстве и ищем его в базе
4. Если устройство найдено, то открываем сессию для пользователя в браузере
5. В это время браузер «слушает» специальную ссылку и как только получен положительный ответ (в данном случае это кука и редирект на нужную страницу) пользователь авторизуется.

Исходники

Листинги в посте приводить не буду, кому интересно, прошу в репозиторий на github.

В завершении хочу добавить. Очень хотелось бы получить адекватного фидбека по улучшению механизма и возможных сценариях использования.
За качество кода не ругайте сильно, писалось все с нуля «на коленке».

P.S. Юзерагент и IP устройства сохраняются в базу, но не используются на авторизации. Оставлено на будущее.

Автор: igentuman

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js