Сбросить / забыть пароль функциональность в MVC 2 с поставщиком членства asp.net по умолчанию - PullRequest
0 голосов
/ 03 февраля 2012

В настоящее время я запускаю веб-сайт MVC2, используя поставщика членства по умолчанию. Все отлично работает, но теперь я нахожу потребности в функциональности забытого пароля.

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

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

passwordFormat="Hashed"

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

Моя идеальная реализация: пользователь может щелкнуть забытый пароль, ввести свое имя пользователя или адрес электронной почты (в идеале - электронная почта). Затем они получат электронное письмо со своим текущим паролем (я полагаю, что это невозможно при использовании метода хеширования), новым рандомизированным паролем, который им говорят изменить, или ссылкой с токеном, который позволяет им сбросить пароль после нажатия кнопки. это.

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

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

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

2 голосов
/ 04 февраля 2012

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

  1. Создайте действие ForgotPassword на контроллере, который управляет вашими учетными записями. Версия HttpGet просто отображает «пожалуйста, введите адрес электронной почты», а версия HttpPost проверяет адрес электронной почты, удостоверяясь, что он принадлежит пользователю.
  2. Если адрес электронной почты действителен, отправьте пользователю электронное письмо. В этом письме у вас должна быть ссылка в формате "{Ваш аккаунт-контроллер} ChangePassword? Id = {Имя пользователя, который запросил изменение пароля, я бы рекомендовал вам зашифровать его для безопасности}"
  3. Ваше действие HttpGet ChangePassword примет идентификатор, сопоставьте его с пользователем в вашей системе. Затем предоставьте пользователю соответствующий вид для изменения своего пароля.
  4. Ваше действие HttpPost ChangePassword обновит старый пароль пользователя новым.

При таком подходе вам не придется отправлять им пароль по электронной почте, вы, по сути, создаете функцию, позволяющую пользователю изменять свой пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...