Здравствуйте, разработчики!
Пишу небольшую утилиту (web-based), которая позволяет пользователю сменить его пароль в Active Directory и еще несколько вкусностей.
Пользуюсь следующим кодом, для версии .net 3.5
public static string ChPassword(string domain, string container, string userName,
string oldPassword, string newPassword)
{
PrincipalContext principalContext =
new PrincipalContext(ContextType.Domain, domain, container,
"admin", "password");
UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, userName);
if (user == null)
throw(new Exception("User Not Found In This Domain"));
user.SetPassword(newPassword);
user.Save(principalContext);
return user.Name;
}
Собственно смена пароля работает, только после этой самой смены, работают оба пароля, и старый, и новый. Что для меня, в общем-то, странно.
Может, кто-то работал с данными библиотеками? Подскажите, пожалуйста, best-practices для решения моей проблемы. Спасибо.
Ответ
Вы далеко не первый кто с этим столкнулся :-) Такое поведение связано с особенностями работы AD и Kerberos. В лучшем случае, старый пароль через некоторое время перестанет работать. Также, если пользователь входил в систему на какой-либо рабочей станции, там пароль кэшируется и в течение некоторого времени может быть использован для входа даже после изменения пароля в каталоге. Вот подробное описание, почему так происходит
Комментариев нет:
Отправить комментарий