Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

C# ile Active Directory İşlemlerine Giriş

Merhaba arkadaşlar
Bu makalemizde Active Directory nedir,ne değildir,ne zaman kullanabiliriz,nasıl çalışır bu gibi konulara değinmeye çalışacağım. Öncelikle nerden ihtiyacım oldu ve neden makale yazma ihtiyacı duyduğumdan yola çıkarak Active Directory’i ne zaman kullanabilirsiniz sorusuna cevap vermeyi düşünüyorum.
İş yerinde basit bir database sorgusu çekip bir kaç bilginin yanında ilgili kullanıcının full name’ini ve departmanını göstermem gerekti. Fakat kullanıcının full name’i ve departmanı benim kullandığım database’de mevcut değildi. Ben de alternatif bir yol olarak bir kaç kişinin tavsiyesi ile bu bilgileri Active Directory’den çekmeye karar verdim.

Bu işlemin nasıl yapıldığına geçmeden önce kısada Active Directory yapısından bahsetmekte yarar var diye düşünüyorum.Aslında Active Directory tam olarak hiyerarşik yapıda olmasa da bazı ilkelerin yönetildiği ve belirlendiği  bir veritabanıdır diyebiliriz kabaca. LDAP(Lightweight Directory Access Protocol : TCP/IP üzerinde çalışan dizin servislerini sorgulamak ve düzeltmek için kullanılan bir ağ iletişim kuralıdır) denilen bir sorgulama mantığı sayesinde bu bilgiler üzerinde sorgulamalar yapabilmek mümkün.Açık kaynak kodlu LDAP’ı http://www.openldap.org adresinden indirip kurabilirsiniz.LDAP sadece Windows serverları için değil UNIX ve LINUX serverları için de kullanılan bir mantıkmış.

LDAP’ın normal veritabanından en önemli farkı dizin yapısını temsil ettiği için mantıksal olarak bir nesnenin altında bulunan bir başka nesne fiziksel olarakta altındadır. LDAP ile bir kayıt eklemek ve silmek veritabanına göre yavaş olsa da ,arama yapmak daha hızlıdır.Bu yüzden Adres Defteri gibi bir kez kaydedilip defalarca aynı nesnelerin çağrıldığı yapılar için uygundur.

O=Organizasyon adı
—-OU=members
———CN=user1
———CN=user2
—-OU=printers
———CN=printer1
———CN=printer2

LDAP için bazı kısaltmalar şu şekildedir : O=Organizasyon,OU=Organization Unit,CN=Common Name,ad soyad,SN=Surname,C=Country

Windows 2000 server ile gelen LDAP sorgulama mantığı  ile çalışan nesnelerin oluşturulduğu, yönetildiği ve ilkelerin belirlendiği veritabanıdır.  Kurulum için 2000 server yada 2003 server versiyonlarından birinin yüklü olması gerekir. LDAP sorguları ile çalıştığı için UNIX, LINUX gibi işletim sistemlerine migrate ( dönüştürme ) yapılabilir.
Active Directory ile ilgili bir kod yazabilmek için öncelikle network security, business rules, ve technological constraints terimlerine aşina olmak gereklidir.Active Directory içerisinde gruplar,isim,soyisim,email,organizasyon gibi nesneler yer alır.

İşin C# tarafına bakacak olursak System.DirectoryServices namespace’i altında en sık kullanacağımız iki sınıf DirectoryEntry ve DirectorySearcher sınıflarıdır.DirectoryEntry AD içerindeki tek bir nesneyi ifade eder.DirectorySearcher ise merkez sistemdeki nesneler arasında arama yapmamızı sağlar.
Aşağıdaki örnek kendi kurumunuzun LDAP bilgilerine göre düzenlenip istenilen sonuçlar elde edilebilir.

public string GetADUsers(){
StringBuilder sb = new StringBuilder();
//Sunucuya bağlanmak için LDAP filtresi verilebilir.Verilmez ise bütün nesneler gelir.
DirectoryEntry entry = new DirectoryEntry(“LDAP://”);
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = “(objectCategory=user)”;// sadece kullanıcılar
string[] properties = new string[] { “fullname”, “cn”, “department”, “samaccountname” }; //istenilen alanlar
search.PropertiesToLoad.AddRange(properties);
foreach (SearchResult AdObj in search.FindAll()){
//string cn = AdObj.GetDirectoryEntry().Properties[“cn”].Value.ToString();
foreach (object p in AdObj.Properties.PropertyNames)
{
sb.AppendLine(p.ToString() + “:::” + AdObj.Properties[p.ToString()][0].ToString());
}
System.IO.File.WriteAllText(@”c:kh.txt”, sb.ToString());
}
return sb.ToString();
}

Umarım az da olsa yararlı olmuştur.
Herkese iyi çalışmalar.

 

May 2, 2010 - Posted by | C# | , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s