Active Directory, ağ üzerinde bulunan tüm bilgilerin (örneğin kullanıcılar, gruplar , bilgisayarlar vb.) depolanmasını sağlayan ve bu bilgilerin kullanıcılar ve yöneticiler tarafından kolayca kullanılmasını ve bulunmasını sağlayan bir servistir. Ayrıca güvenlik, oturum açma sırasında kimlik denetimi gibi işlemlerde Active Directory ile bütünleşik olarak çalışmaktadır.
Active Directory ile .NET ile yaptığımız uygulamaları entegre edebilir ve sistemdeki bilgilere read/write hakkı ile ulaşabiliriz. Verdiğimiz haklar doğrultusunda bilgiler üzerinde değişiklikler uygulayabiliriz.
Makalemdeki bu örneklerde C# dili kullanılmıştır.
Eklenecek Namespaceler
Öncelikle Aktive Directory’ye ulaşmak için aşağıdaki dizin servislerini (namespaceleri) eklememiz gerekmektedir. Ayrıca Projenizde Add Referance diyip .NET tabı altındaki System.DirectoryServices’i eklemeniz gerekiyor.
using System.DirectoryServices; using System.DirectoryServices.ActiveDirectory; using System.DirectoryServices.AccountManagement; |
Bağlantı
Aktive Directory ile kurulacak olan LDAP bağlantısını domain adı girilerek sağlanabilir,aşagıdaki örnekte yazilimmutfagi.com domainine bağlantısı örneklendirilmiştir. Bu bağlantıyı Windows authentication ile sağlanır. Yani budurumda bağlantının güvenli ve DC’lere ulaşıyor olması gerekir. İstendiği taktirde kullanıcı adı ve parolada eklenir.
DirectoryEntry ldapConnection = new DirectoryEntry(); ldapConnection.Path = "LDAP:// dc=yazilimmutfagi,dc=com";
//yada
DirectoryEntry domain = new DirectoryEntry("LDAP://DC=dcadresi,DC=intra"); |
Şeklinde yazılabilir.
Active Directory içinde Arama
Active Directory içinde bulunan nesne özelliklerine ve sahip oldukları değerlere ulaşmak mümkündür.
Aşağıdaki kodda yeni bir directory searcher oluşturulmuş ve bilgisayar nesnelerine göre filtrelenmiştir, daha sonra tüm sonuçlar results collectionuna aktarılmıştır. Yani bilgisayar nesnelerine göre arama sonucunda result, domiande olan tüm bilgisayarları tutmaktadır.
…… DirectorySearcher search = new DirectorySearcher(domain); search.Filter = "(&ObjectCategory=computer)"; SearchResultCollection results = search.FindAll(); …… |
Eğer arama kriterlerimizi daha belirgin bir şekilde yapmak istersek;
…… string groupName = txtGroupName.Text.ToString(); SearchResult result; DirectorySearcher search = new DirectorySearcher(); search.Filter = String.Format("(cn={0})", groupName); search.PropertiesToLoad.Add("member"); search.PropertiesToLoad.Add("Description"); …… …… ……
result = search.FindOne(); |
Bu kod parçasında aramamızı dışarıdan aldığımız gurup adına göre yapmaktayız.
Geri kalan kısımlar elde ettiğimiz datayı herhangi bi listbox’a, excele, vb. ekleme-çıkarma işlemleridir.
Kolay gelsin…