validar usuario password example active c# asp.net active-directory passwords directoryentry

password - No se puede establecer la contraseña con DirectoryEntry. Invoque cuando el usuario se crea en AD usando ASP.NET C#



directoryentry c# example (1)

El problema esta resuelto. Aparentemente, la cuenta de Internet Information Services (IIS_IUSRS) no tenía permisos para SET Passwords para Active Directory. Podría CAMBIAR contraseñas, pero no SET.

Para permitir que una página ASP.NET CONFIGURE una contraseña AD en la creación de la cuenta, tuve que ejecutar "Usuarios y equipos de Active Directory", haga clic con el botón derecho en el dominio y seleccione "Delegar control". Esto abre un asistente que le permitirá otorgar a la cuenta permisos IIS_IUSRS para realizar cambios en AD.

Una aplicación web está creando un usuario desde una página de administración de personal que, a su vez, agrega al usuario a Active Directory. Aquí hay un código para hacer esto:

DirectoryEntry Folder = new DirectoryEntry("LDAP://XXXX.com/CN=ContainerName, DC=XXXX, DC=com", admin, adminPwd, AuthenticationTypes.None); if (Folder.SchemaEntry.Name == "container") { DirectoryEntry user = Folder.Children.Add("CN=" + txtFirstname.Text + " " + txtLastname.Text, "User"); if (DirectoryEntry.Exists(user.Path)) { // Error Msg Here } else { // Required attributes if (txtFirstname.Text != "" && txtLastname.Text != "") { user.Properties["sAMAccountName"].Value = txtFirstname.Text.ToLower() + "." + txtLastname.Text.ToLower(); } if (txtFirstname.Text + " " + txtLastname.Text != "") { user.Properties["cn"].Value = txtFirstname.Text + " " + txtLastname.Text; } // More controls to populate Optional AD attributes. Not entered to conserve space. The code works however. user.CommitChanges(); int val = (int)user.Properties["userAccountControl"].Value; user.Properties["userAccountControl"].Value = val & ~0x2; user.Properties["pwdLastSet"].Value = 0; user.CommitChanges(); user.Invoke("SetPassword", new object[] { "SuperSecretPassword" }); user.CommitChanges(); }

El problema es que una vez creada la cuenta, el método de invocación no puede establecer la contraseña. Cada intento de establecer la contraseña devuelve este error en la declaración catch:

System.Reflection.TargetInvocationException was caught HResult=-2146232828 Message=Exception has been thrown by the target of an invocation. Source=System.DirectoryServices StackTrace: at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args) at Personnel_Govt.CreateUser() in c:/inetpub/wwwroot/TestingFolder/Personnel/Add/Govt.aspx.cs:line 148 at Personnel_Govt.btnSubmit_Click(Object sender, EventArgs e) in c:/inetpub/wwwroot/TestingFolder/Personnel/Add/Govt.aspx.cs:line 95 InnerException: System.UnauthorizedAccessException HResult=-2147024891 Message=One or more input parameters are invalid Source=Active Directory InnerException:

Si la contraseña se establece manualmente en AD con ''Reset Required'' marcado después de que se crea la cuenta, funcionará.

¿Por qué falla el método para configurar la contraseña?