Actualmente me autenticar usuarios en algunos AD utilizando el siguiente código:Active Directory (LDAP) - Comprobar la cuenta bloqueada/contraseña expiró
DirectoryEntry entry = new DirectoryEntry(_path, username, pwd);
try
{
// Bind to the native AdsObject to force authentication.
Object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry) { Filter = "(sAMAccountName=" + username + ")" };
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
if (result == null)
{
return false;
}
// Update the new path to the user in the directory
_path = result.Path;
_filterAttribute = (String)result.Properties["cn"][0];
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message);
}
Esto funciona perfectamente para validar una contraseña contra un nombre de usuario.
El problema viene en que siempre se devuelve un error genérico "Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta". cuando la autenticación falla
Sin embargo, la autenticación también puede fallar cuando una cuenta está bloqueada.
¿Cómo puedo saber si está fallando debido a que está bloqueado?
me he encontrado artículos diciendo que puede utilizar:
Convert.ToBoolean(entry.InvokeGet("IsAccountLocked"))
o hacer algo como explicó here
El problema es que cada vez que intente acceder a cualquier propiedad en el DirectoryEntry, el mismo error sería arrojado.
¿Alguna otra sugerencia de cómo llegar al motivo real por el que falló la autenticación? (cuenta bloqueada/contraseña expirada/etc.)
El AD al que me conecto no necesariamente es un servidor de Windows.
Gracias por esto. He encontrado pruebas en contra de un Servidor AD de Windows 2008 que para las contraseñas expiradas pero válidas, el resultado será 'ERROR_PASSWORD_MUST_CHANGE', pero si la contraseña está vencida y la contraseña proporcionada no es válida, el resultado será' ERROR_LOGON_FAILURE'. – Alpha
Ver mi respuesta (http://stackoverflow.com/a/16796531/1230982) si puede ' t use LogonUser y necesita una solución LDAP. –