viernes, 6 de marzo de 2015

Search.FindOne() arroja el error: "An operations error occurred". in ASP.NET

Utilicé para un proyecto el DirectorySearcher para traer información a través de LDAP del Active Directory, tenia una función para traerme los grupos a los que pertenece un usuario con el siguiente código:

DirectorySearcher search = new DirectorySearcher(entry);
search.SearchScope = SearchScope.Subtree;               
search.Filter = "(&(objectClass=user)(SamAccountName=" + usuario + "))";
search.PropertiesToLoad.Add("memberOf");
SearchResult result = search.FindOne();

Sin embargo, al publicar el codigo en un servidor, la ultima linea me mandaba el siguiente error: An operations error occurred.

Después de revisar un rato en Internet, las dos cosas que me funcionaron para solucionar el problema fueron:

1. Es necesario deshabilitar la autenticación anónima y la personalización (ASP.NET Impersonation), en mi caso, como reviso el usuario de AD que entra en la aplicación solo tengo activado la autenticación por Windows.

2. El AppPool de la aplicación debe correr con la cuenta de NetworkService. Para cambiar la cuenta hay que dar click derecho sobre el AppPool, Seleccionar "Opciones avanzadas", en Identidad (Identity) y en la lista desplegable, seleccionar "NetworkService".