«Забыли пароль»
«Пароль недостаточно надежный»
«Новый пароль не может совпадать со старым»

Если вас когда-либо мучили подобные фразы, продолжайте читать. А если нет, пожалуйста, продолжайте читать. Я надеюсь, что вы найдете то, что вам нравится.

В течение последнего года или около того я работал над идеей системы аутентификации без пароля. Результат можно увидеть на https://www.unlock-auth.com/ и я очень доволен тем, что получилось. Я собираюсь описать процесс, через который я прошел, создавая свой первый крупномасштабный индивидуальный программный проект, и то, как вы можете помочь мне упростить использование Интернета.

Как все началось

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

Я некоторое время обдумывал идею системы аутентификации на основе push, я просто никогда не был уверен, стоит ли это времени и усилий. Но мой друг уговорил меня, наконец, собрать его, поэтому в апреле 2017 года при почти отсутствующем интернет-соединении я запустил Unlock.

В итоге я остался в Таиланде на четыре месяца, и за это время у меня заработало много основных компонентов. Когда я вернулся домой, я был вполне уверен, что, по крайней мере, я хочу довести проект до точки, когда у меня будет что-то готовое к выпуску.

Я подрабатывала репетитором и в итоге нашла графического дизайнера, который помог мне с макетами и дизайнерскими решениями (не моя сильная сторона). И это было в основном так, как это было всего несколько недель назад. В итоге я получил то, что очень напоминало мое первоначальное видение проекта. Что-то, что я был бы рад использовать как разработчик, так и конечный пользователь. Это был непрерывный процесс обучения, связанный с управлением базами данных, проблемами безопасности, библиотеками с открытым исходным кодом, документацией, платежами и всем остальным, что связано с созданием того, что, по сути, является стартапом, и это действительно был потрясающий опыт. Если у вас есть идея, над которой вы сомневаетесь, я бы порекомендовал ей заняться!

Я сейчас работаю в другом офисе, пока смотрю, куда идут дела с Unlock. В тот день, когда я закончил его строить, закончился мой опыт, но мне бы очень хотелось, чтобы хотя бы несколько человек использовали то, что я сделал с нуля.

Как это все работает

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

В проекте есть несколько составляющих. Есть сервер разблокировки, серверные библиотеки, клиентская библиотека и мобильное приложение. Базовый поток через систему выглядит примерно так:

Пользователь посещает веб-сайт, который использует Unlock. Они вводят свой адрес электронной почты и нажимают Enter. Затем веб-сайт использует библиотеку на стороне клиента для открытия соединения WebSocket с сервером веб-сайта, отправляя электронную почту пользователя. Как только сервер получит запрос, он будет использовать внутреннюю библиотеку, чтобы открыть другое соединение WebSocket с сервером разблокировки, передав идентифицирующий токен. Затем сервер разблокировки обрабатывает запрос и отправляет push-уведомление на телефон пользователя, где он может либо подтвердить, либо отклонить попытку входа в систему. Оттуда данные отправляются обратно в обратном порядке, а соединения сокетов закрываются. И это все! Все, что вам нужно для входа в систему, это учетная запись с Unlock.

Я решил построить проект с помощью Node.js, потому что люблю JavaScript и потому что он хорошо справляется со многими одновременными подключениями, которые не очень интенсивно используют процессор. Я выбрал WebSockets вместо традиционных HTTP-запросов из-за характера цикла запроса. Я хотел дать пользователям разумное количество времени для ответа на запросы, чтобы срок их действия истекал через 3 минуты. Это означает, что либо соединение должно оставаться открытым все это время, либо мне придется реализовать какую-то систему длительного опроса. Некоторые конфигурации серверов даже не позволяют устанавливать соединения дольше минуты, и, поскольку я все равно использовал дуплексную связь, сокеты казались мне подходящим вариантом. Они имеют почти полную поддержку в браузере, и большинство серверных языков имеют зрелые библиотеки для их обработки.

На фронтенде я использую Vue.js. Мне нравится его простота и поддержка расширений. Обычно я выбираю его, когда мне нужно сделать адаптивное веб-приложение.

Для мобильной части я использовал Nativescript. Я знал, что мне нужны нативные приложения, а не веб-представления, и я не хотел поддерживать две параллельные базы кода, поэтому в основном это был нативный Nativescript или React (Flutter еще не был полностью готов). Я не использовал React в веб-версии, так как это был не слишком интерактивный проект, поэтому я и оказался там, где я был.

Было действительно здорово иметь один язык для всего моего стека, бэкенд-интерфейса и мобильных устройств. Я знаю, что в моде создавать системы типов поверх JS, но мне нравится играть быстро и свободно, даже если это обожгло меня пару раз.

Так для чего ты мне это рассказываешь?

Я пишу все это не для того, чтобы похвастаться, или, по крайней мере, я пишу все это просто для того, чтобы похвастаться :p Мне бы очень хотелось, чтобы некоторые разработчики интегрировали это в свои сайты и начали создавать пользовательская база. То есть, если людям понравится идея и они согласятся, что пароли изжили себя.

Если вы чувствуете, что хотели бы присоединиться ко мне в этом, вот как вы можете это сделать.

У меня есть страница документации, описывающая WebSockets API, а также любые библиотеки. В настоящее время я сделал только библиотеку Node.js, но я был бы очень признателен, если бы кто-нибудь сделал их для других языков, чтобы максимально упростить внедрение. Вы можете проверить код узла для справки, если хотите!

Есть библиотека на стороне клиента, которая обеспечивает простой способ отправки запросов на ваш сервер, а также готовый пользовательский интерфейс, реагирующий на события.

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

Наконец, я сделал небольшой тестовый сайт, который использует Unlock. Вы можете пойти туда, чтобы увидеть все это в действии, и проверить код, чтобы увидеть, как это выглядит в рабочей среде. На самом деле это сделано без сохранения каких-либо пользовательских данных на сервере. Вся аутентификация и управление учетными записями осуществляется через Unlock. Если у вас есть приложение, которому требуется доступ только к адресу электронной почты или имени пользователя, вы также можете сделать это.

Мобильное приложение является бесплатным, и для разработчиков существует бесплатный уровень, поэтому вы можете приступить к созданию приложений, не беспокоясь о том, что вам нужно что-то делать. Если вам это в конечном итоге нравится и вам нужно увеличить трафик, есть платные планы, которые вам покрывают.

Я был бы более чем рад услышать от любого из вас, если у вас есть мысли или вопросы, или вам нужна помощь в интеграции Unlock! Я также был бы более чем рад услышать от любого, кто был бы заинтересован в покупке Unlock и распространении его на более широкой сцене (я смотрю на вас, Цукерберг).