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