Ako v C# získať dáta z LDAPu
Kategória: .NET, C#, publikované: 06.05.2010, autor: Igor Kulman
Na aktuálnom pracovnom projekte som potreboval získať dáta z LDAPu, rozhodol som sa pre jazyk C# a po troche experimentovania som prišiel na jednoduché riešenie tohto problému, ktoré vám ukážem.
Na pripojenie do LDAPu je potrebné vedieť adresu, prihlasovacie meno a heslo, pripravíme preto najprv konfiguračný súbor,napríklad v XML formáte:
<?xml version="1.0" encoding="utf-8" ?> <config> <ldap> <host>host</host> <port>389</port> <user>login</user> <password>password</password> <pageSize>5000</pageSize> </ldap> </config>
Ako ste si mohli všimnúť, do konfiguračného súboru som pridal aj parameter veľkosť stránky. Je to kvôli tomu, že z LDAPu ťahám veľké množstvo záznamov (v jednom prípade až okolo 20 000), väčšie, ako server umožňuje, je preto potreba zapnúť stránkovanie výsledkov. Hodnota 5000 platí pre server, ku ktorému sa pripájam, u vás môže byť iná, odporúčam zistiť z nastavenia alebo experimentálne.
Z LDAPu chceme dostať takýto objekt
public class LdapRole { public string dxrUid { get; set; } public string Name { get; set; } public string DN { get; set; } public string Description { get; set; } }
Vytvoríme si na to statickú triedu
public static class Ldap { #region Ldap Config private static XDocument config = XDocument.Load("config.xml"); private static string ldapHost { get { return config.Descendants("config").Elements("ldap").First().Elements("host").First().Value; } } private static int ldapPort { get { return Int32.Parse(config.Descendants("config").Elements("ldap").First().Elements("port").First().Value); } } private static string userDN { get { return config.Descendants("config").Elements("ldap").First().Elements("user").First().Value; } } private static string userPasswd { get { return config.Descendants("config").Elements("ldap").First().Elements("password").First().Value; } } private static string domainAndUsername { get { return @"LDAP://" + ldapHost + ":" + ldapPort; } } private static int pageSize { get { return Int32.Parse(config.Descendants("config").Elements("ldap").First().Elements("pageSize").First().Value); } } #endregion public static List<ldaprole> GetRoles() { ... } }
A implementujeme metódu GetRoles
public static List<ldaprole> GetRoles() { DirectoryEntry entry = new DirectoryEntry(domainAndUsername + "/cn=RoleCatalogue,cn=TO2", userDN, userPasswd, AuthenticationTypes.None); SearchResultCollection results; mySearcher.Filter = "(objectClass=to2Role)"; mySearcher.PageSize = pageSize; mySearcher.SearchScope = SearchScope.OneLevel;results = mySearcher.FindAll(); foreach (SearchResult resEnt in results) { role.DN = resEnt.Path.Replace(domainAndUsername + "/", String.Empty); ResultPropertyCollection propcoll = resEnt.Properties; foreach (string key in propcoll.PropertyNames) { foreach (object values in propcoll[key]) { switch (key.ToLower()) { case "dxruid": role.dxrUid = values.ToString(); break; case "description": role.Description = values.ToString(); break; case "cn": role.Name = values.ToString(); break; case "dxrpermissionlink": role.PermissionLink.Add(values.ToString()); break; } } } roles.Add(role) ;}return roles; }
V tejto metóde je vytvorené LDAP spojenie do vetvy RoleCatalogue, nastavený filter na objekty typu to2Role a zanorenie len jednu úroveň a následne sú spracované výsledky. Atribúty je potrebné prechádzať v cykle, ak je nejaký atribút typu multivalue, objaví sa v cykle osobitne pre každú jeho hodnotu.
Zopár zaujímavosti o pražskom metre
Minulý týždeň som sa zúčastnil prehliadky závodu Siemens Mobility v Depe Kačerov. Je to prevádzka, ktorú Siemens... čítať ďalej
Polemika nad Live službami od Microsoftu
Live služby od Microsoftu sú na trhu už dlhší čas. Microsoft nám ponúka email, kalendár, komunikátor, fotografie... čítať ďalej
Pridať komentár
Autor
Autor je absolventom softvéroveho inžinierstva na Univerzite Karlovej v Prahe, pracuje ako Windows Phone 7 vývojár v Inmite a pôsobil aj ako prispievateľ počítačového magazínu.


RSS komentárov



