Я недавно обновил свой пользовательский поставщик с некоторыми из ваших запрошенных функций. К сожалению, это не совсем для продажи, но я хотел сказать вам, что это не будет очень сложно сделать самостоятельно.
Функция множественного вопроса / ответа и принудительный сброс (истечение срока действия пароля) фактически могут быть реализованы с использованием любого поставщика, поскольку они не применяются непосредственно поставщиком. Чтобы включить сброс паролей, вы можете просто определить константу в ваших настройках приложения, то есть «PasswordLifetimeInDays». Затем на странице входа в систему просто переопределите метод Authenticate и проверьте свойство LastPasswordChange для MembershipUser. Если срок действия пароля истек, перенаправьте их на страницу ChangePassword, в противном случае войдите в систему. Ознакомьтесь с этой статьей , чтобы узнать, как реализовать эту функцию.
Сценарий с предварительно сгенерированным вопросом также не подходит для использования в качестве поставщика. Хотя стороннее решение может содержать этот механизм в отдельном API, я полагаю.
SqlMembershipProvider уже предоставляет способ установки количества попыток входа в систему с помощью атрибута MaxInvalidPasswordAttempts.
Действительно, функция дубликатов паролей - единственная часть, которая действительно принадлежит реализации провайдера, поскольку для отслеживания истории паролей требуется дополнительная таблица.
Дайте мне знать, если вы когда-нибудь решите реализовать этот материал самостоятельно, и я мог бы предложить еще несколько советов.