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?