Consulter un LDAP ou un ActiveDirectory
Submitted by PiTiLeZarD on Fri, 04/13/2007 - 11:30
Tagged:
Voila ... je montre une méthode vite fait pour consulter un ActiveDirectory, ça vous donnera les pistes, il faudra creuser pour aller plus loin ...
D'abord voici quelques ressources utiles :
- LDAP Error codes
- Vous voulez tout savoir sur LDAP ? un excellent redbook par IBM (gratuit :))
- Un superbe browser LDAP multiplatform développé sur une base d'Eclipse je suppose ... En tout cas il fait tout et il le fait bien !
- Doc du DirContext, objet utilisé dans le code plus loin ...
- LDAP Search Filter Syntax (la même chose chez Microsoft ?)
- Des codes java qui permettent d'administrer un LDAP C'est loin d'être complet mais ça donne une idée !
Bon voila le code en question :
public static void main(String args[]) { Hashtable env = new Hashtable(11); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); /*- Ici on défini le user avec le path pour y accéder dans le LDAP server -*/ env.put(Context.SECURITY_PRINCIPAL, "CN=Adami\\, Jonathan,OU=Users,OU= ... ,DC=domain,DC=com"); /*- Ici le password -*/ env.put(Context.SECURITY_CREDENTIALS, "password"); /*- Ici l'url de base d'accès au server -*/ env.put(Context.PROVIDER_URL, "ldap://ldapserver:389/DC=domain,DC=com"); try { DirContext ctx = new InitialDirContext(env); /*- Un search control permet de définir le scope de la recherche -*/ SearchControls searchCtls = new SearchControls(SearchControls.SUBTREE_SCOPE, 0, 0, null, true, false); /*- Un filtre pour la recherche -*/ String searchFilter = "(&(objectClass=user)(mail=*))"; /*- la base d'accès a la recherche (sous le PROVIDER_URL -*/ String searchBase = "OU=IT Departement"; /*- la recherche -*/ NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls); while (answer.hasMoreElements()) { SearchResult result = (SearchResult) answer.next(); System.out.println(">>>" + result.getName()); Attributes attrs = result.getAttributes(); if (attrs != null) { System.out.println(" displayName: " + attrs.get("displayName").get()); System.out.println(" mail: " + attrs.get("mail").get()); System.out.println(" accountName: " + attrs.get("sAMAccountName").get()); } } } catch (NamingException e) { System.err.println("Problem getting attribute: " + e); } }

Comments
Jaimerai savoir comment trouver le bon path pour windows server2003 pour l'acces au Active Directory Merci !
Ca dépend fortement de ton environnement. L'AD est censé reflétter la structure de ton entreprise (je devrais dire LDAP parce que j'ai pas de connaissance en AD si ça se trouve il y a des normes ...) donc ton Path sera dépendant de cette structure ...
Si par exemple tu as plusieurs pays et que ta boite est assez morcelée tu peux très bien avoir un truc du style :
OU=Accounting, OU=Fund Services, OU=Private Banking, OU=Luxembourg, DC=MaCompagnie, DC=com
ou une petite boite nationale :
OU=Developement, DC=MaCompagnie, DC=com
il faut voir ça avec ton admin système...