una - Creando usuario de Active Directory con contraseña en C#
poner asteriscos contraseña c (4)
Estoy buscando una manera de crear usuarios de Active Directory y establecer su contraseña, preferiblemente sin dar privilegios de administrador de dominio a mi aplicación / servicio.
He intentado lo siguiente:
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();
Se crea el usuario, pero parece que la contraseña nunca se establece en el usuario.
¿Alguien tiene una idea sobre cómo establecer la contraseña del usuario inicialmente al crearlo? Se acerca de
.Invoke("SetPassword", new object[] { password })
Pero eso requiere que mi código se ejecute con privilegios de administrador de dominio. Como realmente no veo el punto de otorgarle a mi código los privilegios de administrador de dominio, solo para establecer la contraseña inicial (también permito que se restablezcan las contraseñas de usuario, pero aquellas se ejecutan en el contexto de ese usuario en particular), espero que alguien tenga una inteligencia Solución que no requiere que lo haga.
¡Gracias por adelantado!
Intenta con este código.
DirectoryEntry ouEntry = new DirectoryEntry("LDAP://OU=TestOU,DC=TestDomain,DC=local");
for (int i = 0; i < 10; i++)
{
try
{
DirectoryEntry childEntry = ouEntry.Children.Add("CN=TestUser" + i, "user");
childEntry.CommitChanges();
ouEntry.CommitChanges();
childEntry.Invoke("SetPassword", new object[] { "password" });
childEntry.CommitChanges();
}
catch (Exception ex)
{
}
}
Puede hacer todo este proceso mucho más fácil ahora con System.DirectoryServices.AccountManagement (siempre que esté en .Net 3.5):
Vea aquí para un resumen completo
Aquí hay un ejemplo rápido de su caso específico:
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();
}
}
Sí, también puede utilizar el siguiente código para crear la mayor parte de los usuarios
DirectoryEntry ouEntry = new DirectoryEntry("LDAP://OU=TestOU,DC=TestDomain,DC=local");
for (int i = 0; i < 10; i++)
{
try
{
DirectoryEntry childEntry = ouEntry.Children.Add("CN=TestUser" + i, "user");
childEntry.CommitChanges();
ouEntry.CommitChanges();
childEntry.Invoke("SetPassword", new object[] { "password" });
childEntry.CommitChanges();
}
catch (Exception ex)
{
}
}
Usaré el código de @Nick (envuelto en el using
declaraciones para que el contexto y el principal se eliminen correctamente). En cuanto a los privilegios, deberá tener al menos suficientes privilegios en la OU donde está creando al usuario para crear y administrar objetos. Yo crearía un usuario específico bajo el cual se ejecutará su programa y le otorgaría los privilegios suficientes para realizar las tareas que necesita en esa OU específica y no más.