Pull to refresh

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

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

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


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

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

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

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

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

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

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

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

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

Исходники


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

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

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

UPD: Как появится минутка, выложу рабочую версию скрипта для желающих потестировать.
UPD2: Обновлен репозиторий. Выложил скрипт на сервер для желающих потестировать тут
Tags:
Hubs:
+5
Comments 12
Comments Comments 12

Articles