Некоторые вопросы относительно реализации функциональности забытого пароля в asp.net mvc - PullRequest
4 голосов
/ 04 апреля 2011

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

  1. Позвольте сказать, что перед разрешениемпользователи, чтобы сбросить свой пароль, я хочу проверить некоторую дополнительную информацию, такую ​​как их имя и фамилия.Эта информация не сохраняется по умолчанию в таблице, созданной aspnet_regsql.Каков рекомендуемый подход для решения таких проблем?Должен ли я хранить информацию такого рода в отдельной таблице и использовать объединения таблиц для проверки ИЛИ следует ли мне изменить схему таблицы, сгенерированной aspnet_regsql (как?), Чтобы мне не приходилось использовать объединения?Нужно ли мне писать специального провайдера ИЛИ не будет ли это необходимо?

  2. Я читал в местах, например, в этой публикации , что вместо отправки по электронной почте временного пароля,альтернативой является отправка по электронной почте URL-адреса, который при нажатии позволяет пользователям изменять свой пароль.Как это сделать?Как убедиться, что срок действия URL истекает через 1 час?

Ответы [ 2 ]

4 голосов
/ 09 апреля 2011

Я мог бы написать несколько ответов на поставленные вами вопросы. Их слишком много, чтобы вдаваться в детали реализации, но я постараюсь затронуть те моменты, которые я учитывал при разработке сайтов. По сути, вы можете (и должны) работать с поставщиком членства, а не обходить его. Это немного работы, но возможно выполнить все следующие действия с помощью провайдеров и ASP.NET MVC.

  • Избегайте доступа к таблицам членства или непосредственного выполнения хранимых процедур членства.
    1. Их структура и использование могут отличаться в старых или новых версиях.
    2. Поставщики уже созданы для выполнения большинства задач.
    3. LINQ другие методы фреймворка и помогают делать все остальное.
  • Для «дополнительной» информации, такой как Имена, используйте Профили ASP.NET
  • Адреса электронной почты пользователей должны быть уникальными.
  • Пользователи должны создавать свои собственные учетные записи.
    1. Администраторы не должны создавать новые учетные записи напрямую.
    2. Пароли и секретные ответы должны быть известны только пользователю.
    3. Сгенерированный ключ (в виде URL) должен быть отправлен для подтверждения владения данным адресом электронной почты до активации учетной записи.
  • Реализация секретного вопроса и ответа, который уже поддерживается провайдером членства.
    1. Укажите хорошие вопросы для выбора.
    2. Не заставляйте и не доверяйте пользователям придумывать хороший вопрос ad hoc.
    3. Вопрос / ответ можно изменить, только зная текущий пароль.
  • забытые пароли
    1. Можно сбросить, правильно ответив на секретный вопрос.
    2. Может быть сброшено административным действием, если защитный ответ также забыт или учетная запись заблокирована.
  • Сброс пароля должен означать:
    1. Сгенерированный временный пароль отправляется на адрес электронной почты в учетной записи. Временные средства:
      • Установлен флаг (значение профиля), указывающий, что пользователь должен установить новый пароль после следующего входа в систему.
      • Срок действия пароля истекает через определенное время.
    2. Администратор может сбросить пароль, но никогда не должен знать пароль.
  • Заблокируйте учетную запись после слишком большого количества неудачных попыток ввода пароля или безопасного ответа.
    1. Неудачные попытки уже подсчитаны и настроены в провайдере.
    2. При желании можно автоматически разблокировать учетную запись по истечении достаточного времени.

Я расширю это, если подумаю.

2 голосов
/ 04 апреля 2011

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

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

...