Мы с коллегой обсуждаем, как реализовать функцию «Забыли пароль» в фирменном веб-приложении нашей компании.
Мы уже решили, что для создания учетной записи потребуется три обязательных элемента
1) Имя экрана
2) Адрес электронной почты (используется для входа)
1) Пароль (очевидно, также используется для входа в систему. Хранится как односторонний хэш )
Как только мы получим эту информацию, пользователю, пытающемуся зарегистрироваться, будет отправлено письмо с подтверждением и ссылкой для активации. Чтобы активировать свою учетную запись, им нужно будет перейти по ссылке, ввести ключ активации и повторно ввести свой адрес электронной почты и пароль. Если все совпадает, то Presto! Новая учетная запись пользователя активирована.
После активации учетной записи допустим, что пользователь забыл свой пароль. У нас есть две идеи, как справиться с этой ситуацией.
Идея 1
- Пользователь нажимает кнопку «Забыли пароль»
- У пользователя запрашивается адрес электронной почты его учетной записи
- Если электронная почта соответствует активной, не закрытой учетной записи, отправьте временный пароль на уже подтвержденный адрес электронной почты
- Пользователь пытается войти с временным паролем
- Если временный пароль совпадает с адресом электронной почты, попросите пользователя сбросить пароль. Запретить полный вход в систему до замены временного пароля.
Идея 2
Это потребует сбора секретных вопросов и секретных ответов во время регистрации.
- Пользователь нажимает кнопку «Забыли пароль»
- Пользователю предлагается ввести адрес электронной почты и ответить на секретный вопрос
- После проверки обоих, пользователь может сбросить пароль
Беспокойство
Одна из проблем, с которыми мы сталкиваемся, заключается в том, что (внутри нашей компании) несколько сотрудников будут использовать одну учетную запись. Некоторые из нас считают, что метод секретного вопроса исключается как вариант.
Однако пароль, отправленный по электронной почте (временный или нет), будет уязвим, поскольку электронная почта не защищена.
Сводка вопроса
Учитывая внутренние эксплуатационные ограничения (от нескольких человек до единого входа), какая из этих идей будет наиболее безопасной и удобной для пользователя? Или не адекватны?
Редактировать
Может ли переполнение стека помочь мне, оценив ответы? Ниже представлено несколько мнений, но SO не указывает на качество ответов.