![](https://blog.ibice.ru/style/images/empty.gif)
Сегодня мне попалась статья «
Сами по себе формы восстановления доступа развиваются вместе с развитием способов авторизации. Если когда-то раньше для восстановления доступа достаточно было просто ввести свой электронный адрес и получить на него новый пароль, то сейчас все существенно усложняет множество факторов, среди которых отмечу наиболее весомые: авторизация через социальные сети и двухфакторная авторизация. Первая у меня не вызывает такого восторга, как у множества разработчиков, перешедших чисто на эту систему авторизации, по причине своей нестабильности. Если пользователь регистрируется на конечном сайте, то он либо зарегистрирован, либо нет. Если пользователь регистрируется через социальные сети, то стоит быть готовым к тому, что его учетная запись в социальной сети может быть приостановлена либо похищена, после чего пользователь полностью утратит возможность ее восстановления (видели когда-то форму восстановления при авторизации через социальные сети?).
Сама по себе система авторизации через социальные сети не предполагает такого явления, как пароль доступа. Пароль здесь просто не нужен, так как данные предоставляются на основании подтверждения действия авторизованного в социальной сети пользователя. Отсюда вытекает вопрос: каким же образом такая учетная запись на конечном сайте может быть восстановлена? Вы, конечно, скажете, что этот вопрос не имеет смысла, так как потерять контроль над такой учетной записью можно только вместе с профилем социальной сети. Я на это скажу, что все может быть намного интереснее, чем кажется: прекрасный тому пример ― «Имхонет». Когда-то на этом сайте присутствовала возможность регистрации через OpenID. Со временем, механизм авторизации перестал работать, после чего такой вариант просто убрали. Теперь учетные записи пользователей, зарегистрированных через OpenID просто недоступны, так как восстановить доступ к ним невозможно. Из этой истории можно сделать вывод о том, что даже пользователи, которые регистрируются через социальные сети, должны иметь какое-нибудь значение, по которому можно произвести идентификацию, например, адрес электронной посты. На основании введенного адреса в таком случае на него будет отправлено письмо со ссылкой на установку нового пароля либо со случайным паролем. В таком случае авторизация будет работать даже в случае отказа внешнего сервиса и доступ будет возможно восстановить независимо от причины утраты.
Вторая проблема авторизации через социальные сети заключается в том, что пользователь, который зарегистрировался через одну социальную сеть, не сможет потом войти через другую. Вернее, сможет, конечно, но это уже будет совершенно другая учетная запись. На самом деле, сегодня достаточно трудно предположить, что кто-то из активных пользователей сети Интернет имеет учетную запись только в одной социальной сети. Почему бы не заставить авторизацию работать так, чтобы один человек через любую из социальных сетей, в которых он зарегистрирован, мог войти в одну конкретную собственную учетную запись на конечном сайте? Реализацию такого механизма я встречал только на одном сайте. Там зарегистрироваться можно было при помощи любой из социальных сетей, после чего в профиле можно было найти кнопки «Привязать к профилю социальной сети» напротив логотипов различных социальных сетей. Как это работало конкретно я сказать не могу, так как не испытывал, но по сообщениям разработчиков сайта, которым я склонен верить, авторизация в любой из привязанных социальных сетей давала авторизацию в профиле пользователя на конечном сайте. Это логично.
А теперь давайте о нелогичном. На одном достаточно известном сайте имеется функция восстановления пароля с использованием номера телефона, указанного в профиле восстанавливаемого пользователя. Можно восстановить доступ даже в случае утери доступа к мобильному телефону, однако работает она весьма своеобразно: для того, чтобы отвязать от профиля утраченный номер мобильного телефона, нужно ввести код из SMS-сообщения, которое отправляется на тот самый номер. Достаточно элегантно. Теперь для того, чтобы отвязать от аккаунта утраченный номер телефона, достаточно всего лишь восстановить к нему доступ. Естественно, номер телефона при двухфакторной авторизации должен быть защищен, но не до такой же степени.
Примерно такая же система используется на некоторых сайтах для изменения адреса электронной почты. Чтобы заменить его, нужно перейти по ссылке, которая отправляется на предыдущий адрес, а вот что делать, если, к примеру, такого сервера уже давно нет ― загадка. Очень хорошо, если подобные сайты имеют адекватную службу технической поддержки, в противном же случае намного проще создать новый аккаунт, чем восстанавливать старый.
Что касается авторизации с подтверждением по SMS, то в последнее время я усомнился в ее эффективности. С тех пор, как двухфакторная авторизация была внедрена на наших проектах, я стал чаще сталкиваться с проблемами входа, так как одноразовые пароли приходят либо долго, либо вообще не приходят. Проблем тут много: начиная от SMS-шлюза с ручной премодерацией (как у epochta) и заканчивая телефонами в роуминге. В последнем почему-то сообщения приходят через раз и этому нет никакой логики. Что правда, мне стало казаться, что причина такой заминки тут в том, что наш особо хитрый подрядчик, предоставляющий услуги SMS-шлюза, просит дополнительные деньги за альфа-имена при отправке сообщений на российские номера. В автоматическом режиме отправки никакого всплывающего предложения об увеличении стоимости нет и быть не может, поэтому номер отправителя меняется на случайно сгенерированный. Это хорошо, если на номер столичного МТС отправляется сообщение с якобы Мегафона в Башкортостане, но если на номер одного оператора отправляется сообщение с подменой номера на номер этого же оператора, то разве будут у этого оператора какие-то проблемы с тем, чтобы проверить, отправлялось ли такое сообщение указанным абонентом, да и вообще существует ли такой абонент. В итоге оказывается проще заводить «TravelSiM» для одноразовых паролей, так как входящие сообщения там не тарифицируются, зато приходят почти в 100% случаев.