net asp active asp.net active-directory windows-integrated-auth

asp.net - asp - windows authentication iis



DirectoryServicesCOMException(0x80072020) cuando se usa Active Directory desde la aplicaciĆ³n ASP.NET (1)

Introducción

Estoy manteniendo una aplicación heredada ASP.NET 3.5 que consulta Active Directory. La aplicación utiliza "Autenticación integrada de Windows" y está diseñada para conectarse a Active Directory utilizando su propio contexto de seguridad en lugar de un nombre de usuario y contraseña dedicados.

Aquí está el código relevante.

using (DirectoryEntry root = new DirectoryEntry()) using (DirectorySearcher searcher = new DirectorySearcher(root)) { searcher.Filter = string.Format("(&(samAccountName={0})(objectClass=user)(objectCategory=person))", userName.Trim()); SearchResultCollection results = searcher.FindAll(); }

Aunque utiliza ASP.NET 3.5, debe poder ejecutarse desde un grupo de aplicaciones ASP.NET 4.0 debido a restricciones de infraestructura existentes.

Problema

La llamada a FindAll arroja la siguiente excepción bajo ciertas circunstancias:

System.DirectoryServices.DirectoryServicesCOMException (0x80072020): se ha producido un error de operaciones.

Cuando inspecciono el objeto de excepción con el depurador de Visual Studio, la propiedad ExtendedErrorMessage contiene información más detallada:

000004DC: LdapErr: DSID-0C0906E8, comentario: para realizar esta operación, se debe completar un enlace correcto en la conexión., Data 0, v1db1

La siguiente captura de pantalla muestra cómo se ve esto en el depurador de Visual Studio:

Que funciona

He encontrado algunas soluciones alternativas para que esto funcione, pero ninguna de ellas es aceptable para mí:

  1. Deshabilitar la Autenticación de Windows integrada y, en su lugar, usar la Autenticación básica .
  2. En IIS, ejecuta la aplicación en ASP.NET 2.0 con la cuenta de servicio de red y la suplantación de ASP.NET deshabilitada .
  3. Solo accediendo a la aplicación desde el servidor web, usando localhost como nombre de host.
  4. Usar la suplantación ASP.NET con una cuenta codificada en web.config.

Lo que no funciona

He encontrado algunas sugerencias de Internet, pero ninguna de ellas resolvió completamente el problema:

  1. Usando HostingEnvironment.Impersonate() .
  2. Deshabilitar la suplantación

Lo que quiero

Me gustaría hacer que esto funcione sin tener que volver a configurar nada en Active Directory. Funciona bien bajo cierta configuración de IIS como se muestra arriba, así que creo que debería ser posible hacer que funcione reconfigurando la aplicación o IIS (excepto para cambiar la versión de .NET framework).


Creo que el problema tiene múltiples causas:

  1. Uso de la suplantación de ASP.NET.
  2. Ejecutar la aplicación ASP.NET 3.5 en un grupo de aplicaciones ASP.NET 4.0.

Para resolver el segundo, actualice la aplicación a ASP.NET 4.0 o configure IIS para usar ASP.NET 2.0.