Я ищу способ создать Пользователей Active Directory и установить их пароль, предпочтительно не давая мои полномочия Администратора домена приложения/сервиса.
Я попробовал следующее:
DirectoryEntry newUser = _directoryEntry.Children.Add("CN=" + fullname, USER);
newUser.Properties["samAccountName"].Value = username;
newUser.Properties["userPassword"].Value = password;
newUser.Properties["mail"].Value = email;
newUser.CommitChanges();
Пользователь создается, но кажется, что пароль никогда не устанавливается на пользователе.
У кого-либо есть идея о том, как установить пароль пользователя первоначально при создании пользователя? Я знаю о
.Invoke("SetPassword", new object[] { password })
Но это требует, чтобы мой код был выполнен с полномочиями Администратора домена. Поскольку я действительно не вижу точку, чтобы предоставить мои полномочия Администратора домена кода, только установить начальный пароль (я также позволяю сброс пароля пользователя, но выполненных в контексте того конкретного пользователя), я надеюсь, что у кого-то есть умное решение, которое не требует, чтобы я сделал так.
Заранее спасибо!
Теперь вы можете сделать весь этот процесс намного проще с помощью System.DirectoryServices.AccountManagement (пока вы используете .Net 3.5):
См. Здесь для полного изложения
Вот краткий пример вашего конкретного случая:
using(var pc = new PrincipalContext(ContextType.Domain))
{
using(var up = new UserPrincipal(pc))
{
up.SamAccountName = username;
up.EmailAddress = email;
up.SetPassword(password);
up.Enabled = true;
up.ExpirePasswordNow();
up.Save();
}
}
Я бы использовал код @Nick (обернутый в using
операторы, чтобы контекст и принципал утилизировались должным образом). Что касается привилегий, вам нужно, по крайней мере, иметь достаточно привилегий на OU, где вы создаете пользователя, чтобы создавать и управлять объектами. Я бы создал конкретного пользователя, под которым будет работать ваша программа, и дал бы ему достаточно привилегий для выполнения задач, которые ему нужны в этом конкретном OU, и не более.