Tengo un conjunto de cuentas de prueba que se crearán pero las cuentas se configurarán para requerir un cambio de contraseña en el primer inicio de sesión. Quiero escribir un programa en C# para revisar las cuentas de prueba y cambiar las contraseñas.Cómo cambiar mediante programación la contraseña de Active Directory
Respuesta
Puede utilizar el UserPrincipal clase SetPassword método, siempre y cuando tenga suficientes privilegios, una vez que haya encontrado el objeto UserPrincipal correcta. Use FindByIdentity para buscar el objeto principal en cuestión.
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName))
{
user.SetPassword("newpassword");
// or
user.ChangePassword("oldPassword", "newpassword");
}
}
Aquí hay una gran programación de Active Directory de referencia rápida:
Howto: (Almost) Everything In Active Directory via C#
ver el código de restablecimiento de contraseña cerca del final.
public void ResetPassword(string userDn, string password)
{
DirectoryEntry uEntry = new DirectoryEntry(userDn);
uEntry.Invoke("SetPassword", new object[] { password });
uEntry.Properties["LockOutTime"].Value = 0; //unlock account
uEntry.Close();
}
Aquí está la solución:
string newPassword = Membership.GeneratePassword(12, 4);
string quotePwd = String.Format(@"""{0}""", newPassword);
byte[] pwdBin = System.Text.Encoding.Unicode.GetBytes(quotePwd);
UserEntry.Properties["unicodePwd"].Value = pwdBin;
UserEntry.CommitChanges();
En mi caso, recibo el mensaje: "El servidor no está dispuesto a procesar la solicitud". – Samuel
probar este código. Funciona para mí,
public void ChangeMyPassword(string domainName, string userName, string currentPassword, string newPassword)
{
try
{
string ldapPath = "LDAP://192.168.1.xx";
DirectoryEntry directionEntry = new DirectoryEntry(ldapPath, domainName + "\\" + userName, currentPassword);
if (directionEntry != null)
{
DirectorySearcher search = new DirectorySearcher(directionEntry);
search.Filter = "(SAMAccountName=" + userName + ")";
SearchResult result = search.FindOne();
if (result != null)
{
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("ChangePassword", new object[] { currentPassword, newPassword });
userEntry.CommitChanges();
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
Este es el mejor método para cambiar la contraseña de una aplicación web. No crea una carpeta de usuario en el servidor y cambia la contraseña en lugar de un restablecimiento de administrador. Razones por las cuales esto es beneficioso enumerado aquí. https://stackoverflow.com/questions/17493571/directoryservices-userprincipal-setpantword-ignores-password-policy-password-hi – BinaryPatrick
Es posible establecer una nueva contraseña a una cuenta de dominio, mediante el uso de .NET Framework 2.0. Ver el código de trabajo abajo:
string domainfqdn="mydomain.test.gov" //fqdn of the domain
string ldapPath =GetObjectDistinguishedName (objectClass.user,returnType.distinguishedName, args[0].ToString(),domainfqdn);
ldapPath="LDAP://" + domainfqdn + :389/"+ldapPath;
DirectoryEntry uEntry = new DirectoryEntry(ldapPath,null,null,AuthenticationTypes.Secure);
uEntry.CommitChanges();
Console.WriteLine(ldapPath);
string password="myS3cr3tPass"
uEntry.Invoke("SetPassword", new object[] { password });
uEntry.Properties["LockOutTime"].Value = 0; //unlock account
uEntry.CommitChanges();
uEntry.Close();
es muy importan para comprobar los parámetros en uEntry, el código se ejecutará bajo el contexto de seguridad del subproceso actual, a menos que los valores nulos se especifican
public void ResetPassword(string userName, string Password, string newPassword)
{
try
{
DirectoryEntry directoryEntry = new DirectoryEntry(Path, userName, Password);
if (directoryEntry != null)
{
DirectorySearcher searchEntry = new DirectorySearcher(directoryEntry);
searchEntry.Filter = "(samaccountname=" + userName + ")";
SearchResult result = searchEntry.FindOne();
if (result != null)
{
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("SetPassword", new object[] { newPassword });
userEntry.Properties["lockouttime"].Value = 0;
}
}
}
}
catch (Exception ex)
{
Log.Error("Password Can't Change:" + ex.InnerException.Message);
}
}
- 1. Autenticación de Active Directory
- 2. Active Directory (LDAP) - Comprobar la cuenta bloqueada/contraseña expiró
- 3. ¿Por qué Active Directory valida la última contraseña?
- 4. Configuración de Tomcat para la autenticación mediante Windows Active Directory
- 5. Crear usuario de Active Directory con contraseña en C#
- 6. lograr que los grupos de Active Directory mediante C#
- 7. ¿Hay alguna forma de cambiar la contraseña de gmail mediante programación mediante Java?
- 8. ldap nodejs active directory authentication
- 9. ¿Cómo se integra Delphi con Active Directory?
- 10. Windows Active Directory Emulator
- 11. Gerrit y Active Directory
- 12. Active Directory vs OpenLDAP
- 13. Ruta de LDAP Active Directory
- 14. Active Directory Lista de OU
- 15. Grupos anidados de Active Directory
- 16. Cómo recuperar SAMAccountName de Active Directory
- 17. Conexión de flex/php a Active Directory
- 18. Cambiar la fecha del sistema mediante programación
- 19. usuario de Active Directory fecha de expiración de la contraseña .NET/OU directiva de grupo
- 20. JNDI con Active Directory PartialResultException
- 21. Regex que valida la complejidad de contraseña predeterminada de Active Directory
- 22. Cómo conectarme con Java en Active Directory
- 23. Cómo uso la autenticación NTLM con Active Directory
- 24. Public Active directory for testing
- 25. ASP.NET Cómo obtener la lista de grupos en Active Directory
- 26. ¿Cómo puedo cambiar la fuente de una etiqueta mediante programación?
- 27. Cómo cambiar la pestaña (de un UITabViewController) mediante programación?
- 28. Detectar si una cuenta de usuario de Active Directory está bloqueada mediante LDAP en Python
- 29. Almacenar datos de aplicaciones en Active Directory
- 30. Encontrar CN de usuarios en Active Directory
Eso es solo disponible en .NET 3.5 y superior, BTW (PrincipalContext y todo). –
Recuerde 'usuario.Guardar()' después. –