2010-01-30 38 views
8

Estoy trabajando en una aplicación .NET escrita en C# y WPF. En esta aplicación autenticaremos a los usuarios hacia un servidor Active Directory. Al final, es posible que deseemos apoyar otras implementaciones de LDAP también, por lo que si puedo construir esto sin ser específico de ActiveDirectory eso sería una ventaja.Primeros pasos con ActiveDirectory en C#

¿Cuál es el mejor enfoque para comenzar con esto? ¿Hay algún buen recurso que debería revisar? He oído que hay una biblioteca en .NET para manejar la comunicación con Active Directory. ¿O hay una biblioteca LDAP general? ¡Cualquier consejo es apreciado!

Nota: Estoy usando .NET 3.5.

Respuesta

5

.NET 3.5 hizo esto tremendamente más fácil de lo que solía ser mediante la adición del espacio de nombres System.DirectoryServices.AccountManagement. A menos que no estés en .NET 3.5, iría directamente a este espacio de nombres. Como de costumbre, The Code Project tiene something up showing a lot of example uses.

Simplicidad ejemplo, la autenticación de un usuario:

var pc = new PrincipalContext(ContextType.Domain, "MyDomain", "DC=MyDomain,DC=com"); 
return pc.ValidateCredentials(username, pass); 
2

SI está en .NET 3.5, definitivamente eche un vistazo al espacio de nombres System.DirectoryServices.AccountManagement - ¡hizo las cosas mucho más fáciles que antes!

Consulte también este artículo de MSDN Managing Directory Security Principals in the .NET Framework 3.5 sobre el tema - ¡muy recomendable!

Si necesita mantenerse "genérico" y admite otros directorios LDAP, también puede consultar Introduction to System.DirectoryServices.Protocol que es el ensamblado y espacio de nombre de Microsoft .NET que trata con llamadas LDAP de nivel inferior y debería funcionar en contra de cualquier Directorio compatible con LDAP (Sun, Novell, etc.)

4

Evitaría usar System.DirectoryServices.AccountManagement si fuera posible. Ciertamente, parece facilitar las cosas, pero he tenido numerosos problemas (como ignorar un puerto específico en ocasiones) y es realmente una tarea sencilla para System.DirectoryServices. Aunque puede tener suerte con otros directorios LDAP, ciertamente no fue diseñado para eso.

Recomendaría el montaje System.DirectoryServices.Protocols. Es un poco más difícil comenzar y también requerirá un poco más de esfuerzo, pero encontrará que es mucho más flexible con un mejor rendimiento y es mucho más compatible con los estándares. He tenido un gran éxito utilizándolo contra varios directorios diferentes, incluido AD.

MSDN tiene un fantástico introduction article, que cubrirá la mayoría de los escenarios que probablemente necesite.

0

Puede referir mi proyecto OSS que se basa en el patrón ActiveRecord de la siguiente manera (Debido a que es de código abierto puede descubrir cómo operar el AD con DirectoryEntry, DirectoryEntry no solo es compatible con el protocolo LDAP sino también con IIS, WIN y sucesivamente, de modo que desarrollo este lib):

using (var userObject = UserObject.FindOneByCN(this.ADOperator, “pangxiaoliang”)) 
{ 
    if(userObject.Email == "[email protected]") 
    { 
      userObject.Email = "[email protected]"; 
      userObject.Save(); 
    } 
} 

https://landpyactivedirectory.codeplex.com/documentation

y encontrará que sea fácil de operar el AD con él, si usted no tiene interés con él por favor ignore mi respuesta. Cualquier pregunta sobre AD, contácteme :)

Cuestiones relacionadas