Hace un tiempo que estoy desarrollando un componente para la autenticacion con varios sistemas que manejan usuarios. No todos son LDAP compatibles, por lo que hay que "personalizarlos" un poco, antes de ponerlos en marcha. En el caso concreto de Active Directory, despues de probar varias funciones, la mejor que encontré fue la siguiente:

public bool IsAuthenticated(string domain, string username, string pwd)

{

 string domainAndUsername = domain + @"\" + username;

 DirectoryEntry entry = new DirectoryEntry( _path, domainAndUsername, pwd);

 

 try

 {

  // Bind to the native AdsObject to force authentication.

  Object obj = entry.NativeObject;

  DirectorySearcher search = new DirectorySearcher(entry);

  search.Filter = "(SAMAccountName=" + username + ")";

  search.PropertiesToLoad.Add("cn");

  SearchResult result = search.FindOne();

  if(null == result)

  {

   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);

 }

 return true;

}

Esta función trabaja con los objetos de la librería System.DirectoryServices. y para "reflejar" a un usuario dentro de los objetos de Active Directory, se utiliza el objeto DirectoryEntry. Este objeto encapsula la funcionalidad de un Nodo de Active Directory, y en este caso se presenta como un usuario. Para crear un objeto de este tipo se utiliza el Constructor que inicializa una nueva instancia de la clase DirectoryEntry con las propiedades Path, Username y Password.

path
Ruta de acceso de DirectoryEntry. La propiedad Path se inicializa en este valor.
username
Nombre de usuario que se va a utilizar para autenticar el cliente. La propiedad Username se inicializa en este valor.
password
Contraseña que se va a utilizar para autenticar el cliente. La propiedad Password se inicializa en este valor.

Y personalmente, me ha sido muy útil 😀

Saludos

PD: La funcion original y un artículo completísimo sobre desarrollo de aplicaciones seguras se puede encontrar en el MSDN, aqui –>.

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading