Смена пароля пользователя администратором в MembershipProvider

В .NET Framework 2.0 есть замечательный сервис - MembershipProvider. Благодаря ему, отпала необходимость реализовывать доступ к базе пользователей в каждом новом проекте. Теперь это организовано стандартным способом и все знают как (что характерно, даже новые сотрудники, только что пришедшие в проект). Замечательно.

Но, возникла задача: администратор системы должен иметь возможность сменить пароль пользователю.

Вроде все просто, есть метод ChangePassword, которая именно это и делает. Но посмотрим на него внимательнее:
public abstract bool ChangePassword(
string username,
string oldPassword,
string newPassword
)
Оказывается, надо знать старый пароль, чтобы установить новый. Видно этот метод предназначен не для администратора, а для самого пользователя. Хорошо, горевать не будем, есть еще один метод:
public abstract string ResetPassword(
string username,
string answer
)
Этот не требует старый пароль, но требует знать "девичью фамилию матери пользователя" :) Более того, пароль то он меняет, но только на тот, который сам автоматически сгенерирует. К счастью, он возвращает сгенерированный пароль в качестве результата, а потому поменять пароль на нужный несложно. Надо просто сменить его 2 раза:

string newPassword = "1";
MembershipProvider provider = Membership.Provider;
string generatedPassword = provider.ResetPassword("user1", "xxxxx");
provider.ChangePassword("user1", generatedPassword, newPassword);

Сначала на сгенерированный, а потом на нужный. Но администратор скорее всего не знает ответа на секретный вопрос пользователя, а потому может сменить пароль, только в случае если разрешено сбрасывать пароль без ответа на секретный вопрос (RequiresQuestionAndAnswer == false). В конфигурации, когда ответ на секретный вопрос обязательный, похоже поставленная задача нереализуема.

Коментарі

Популярні дописи з цього блогу

OAuth-аутентификация через ВКонтакте

Українська мова