Estoy teniendo problemas para conseguir los grupos de Active Directory a través de System.DirectoryServices
lograr que los grupos de Active Directory mediante C#
Originalmente empecé mi aplicación en un equipo que se registró en el dominio, pero como era un dominio en vivo que hice No quiero escribir nada en AD, así que configuré una máquina con Windows XP como sistema operativo host e instalé Windows Server 2003 en una máquina virtual.
He agregado otro puerto Ethernet en la máquina y configurado un interruptor, el 1 puerto Ethernet está dedicado a la VM y el otro puerto se usa para el host.
Después de configurar las direcciones IP para que se comunicaran, transferí mi aplicación a la máquina host y la encendí, pero recibí un DirectoryServicesCOMException
.
Con el mensaje de que el nombre de usuario y la contraseña no eran válidos :(solo para comprobar que no estaba activo, creé una tercera máquina virtual e instalé Windows XP, que agregué al dominio con las credenciales probadas en la APLICACIÓN , trabaja un convite
Así que pensamos que debe ser porque la máquina donde se ejecuta la aplicación no es parte del dominio
Aquí está el bloque de código que estaba causando el problema:..
public CredentialValidation(String Domain, String Username, String Password, Boolean Secure)
{
//Validate the Domain!
try
{
PrincipalContext Context = new PrincipalContext(ContextType.Domain, Domain); //Throws Exception
_IsValidDomain = true;
//Test the user login
_IsValidLogin = Context.ValidateCredentials(Username, Password);
//Check the Group Admin is within this user
//******HERE
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
foreach(Principal Result in Results)
{
if (Result.SamAccountName == "Domain Admins")
{
_IsAdminGroup = true;
break;
}
}
Results.Dispose();
Context.Dispose();
}
catch (PrincipalServerDownException)
{
_IsValidDomain = false;
}
}
La información La información en el diálogo de inicio de sesión se ingresa así:
Domain: test.internal
Username: testaccount
Password: Password01
Espero que alguien pueda arrojar algo de luz en este error.
Actualización:
Después de comprobar los registros de seguridad en el servidor puedo ver que mi registro en los intentos tuvo éxito, pero esto se debe a:
_IsValidLogin = Context.ValidateCredentials(Username, Password);
la línea después de donde Estoy comprobando que los grupos están causando el error, por lo que el problema principal es que las líneas de código a continuación no funcionan correctamente desde una máquina que no está unida a la red:
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
¿Está seguro de que las credenciales de usuario tomadas como entrada por el método son correctas para el dominio dado que está intentando autenticar contra el usuario dado? ¿Este usuario realmente existe? ¿Has probado el método antiguo utilizando las clases 'DirectoryEntry' y' DirectorySearcher' del espacio de nombres 'System.DirectoryServices'? Solo sugerencias, realmente no sé acerca de los objetos principales. –
usuario existe ya que he colocado otra máquina VM XP en la red con las mismas credenciales, puedo ver al usuario en AD y ejecutando el comando 'start \\ server1' en cmd obtengo el diálogo de credenciales y puedo auth a través de eso, esto funciona al 100% en máquinas que son parte de la red. – RobertPitt