validar usuario single password obtener ejemplos datos crear conectar con active c# active-directory directoryservices

c# - usuario - Error de ActiveDirectory 0x8000500c al atravesar propiedades



single sign on c# active directory (4)

Acabo de encontrar el problema y el mío fue con una aplicación web. Tenía este código que saca al usuario de la autenticación de Windows en IIS y extrae su información de AD.

using (var context = new PrincipalContext(ContextType.Domain)) { var name = UserPrincipal.Current.DisplayName; var principal = UserPrincipal.FindByIdentity(context, this.user.Identity.Name); if (principal != null) { this.fullName = principal.GivenName + " " + principal.Surname; } else { this.fullName = string.Empty; } }

Esto funcionó bien en mis pruebas, pero cuando publiqué el sitio web aparecería este error en la llamada a FindByIdentity.

Solucioné el problema utilizando el usuario correcto para el grupo de aplicaciones del sitio web. Tan pronto como lo solucioné, esto comenzó a funcionar.

SomeName el siguiente fragmento ( SomeName / SomeDomain contiene valores reales en mi código)

var entry = new DirectoryEntry("LDAP://CN=SomeName,OU=All Groups,dc=SomeDomain,dc=com"); foreach (object property in entry.Properties) { Console.WriteLine(property); }

Imprime OK para las primeras 21 propiedades, pero luego falla con:

COMException {"Unknown error (0x8000500c)"} at System.DirectoryServices.PropertyValueCollection.PopulateList() at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) at System.DirectoryServices.PropertyCollection.PropertyEnumerator.get_Entry() at System.DirectoryServices.PropertyCollection.PropertyEnumerator.get_Current() at ActiveDirectory.Tests.IntegrationTests.ObjectFactoryTests.TestMethod1() in MyTests.cs:line 22

¿Por qué? ¿Cómo puedo prevenirlo?

Actualizar

Es un atributo personalizado que falla.

Intenté utilizar entry.RefreshCache() y entry.RefreshCache(new[]{"theAttributeName"}) antes de enumerar las propiedades (que no ayudaron).

Actualización2

entry.InvokeGet("theAttributeName") funciona (y sin RefreshCache ).

¿Alguien puede explicar por qué?

Actualización3

Funciona si proporciono el FQDN al elemento: LDAP://srv00014.ssab.com/CN=SomeName,xxxx

Generosidad

Estoy buscando una respuesta que aborde lo siguiente:

  • Por qué entry.Properties["customAttributeName"] falla con la excepción mencionada
  • Por qué funciona entry.InvokeGet("customAttributeName")
  • La causa de la excepción
  • Cómo hacer que ambos trabajen

Tengo el mismo fracaso. Me leen y vi muchas preguntas sobre el error 0x8000500c al enumerar el atributo de un DirectoryEntry. Pude ver, con Process Monitor (Sysinternals), que mi proceso ha leído un archivo de esquema. Este archivo de esquema se guarda en C: / Users / xxxx / AppData / Local / Microsoft / Windows / SchCache / xyz.sch.

Elimine este archivo y el programa funciona bien :)



Si uno quiere acceder a un atributo personalizado desde una máquina que no es parte del dominio donde reside el atributo personalizado (las credenciales del usuario conectado no tienen importancia) uno necesita pasar el nombre totalmente calificado del objeto que intenta De lo contrario, el caché de esquema en la máquina cliente no se actualiza correctamente, no importa todas las llamadas a schema.refresh () que realice

Encontrado aquí . Esto parece ser su problema, dadas las actualizaciones hechas a la pregunta.