Forum
Merhaba,
Şirket içinde kullanmakta olduğumuz, çalışanların günlük yaptığı işlerin bilgisini girdiği küçük bir program kullanıyoruz.
Bu programı, şirketin yurt dışında da çalışanları olduğu için daha kapsamlı bir hale getirip web ortamına taşımayı düşünüyoruz. Kullanıcılar sisteme giriş yapmak için, şirket içinde bilgisayarına giriş yaparken kullandığı kullanıcı adı ve parola'yı kullanmalı. Şirket bilgisayarları bir Domain Controller'a bağlı ve kullanıcılar Active Directory üzerinde.
Asp.Net MVC'de Windows Authentication kullanarak bu nasıl yapılabilir?
Kullanıcılar bu siteye nereden ulaşırsa ulaşsın, sisteme girişi bilgisayarında kullandığı kullanıcı adı ve parolasını kullanarak giriş yapacak.
Kullanıcı sisteme giriş yapacak fakat sitede yetkilendirme işlemleri için kullanıcılar belli rollere sahip olmalı. Active Directory'de kullanıcılara belli roller tanımlamak mümkün mü? Eğer değilse bu yetkilendirme işlemi nasıl yapılabilir? Active Director mi kullanmalı? Yoksa LDAP mı?
Bu konuda tam olarak istediğim kaynaklara ulaşamadığım için burada bir tartışma konusu açmayı tercih ettim. Şimdiden teşekkürler.
Merhaba Mustafa bey,
Öncelikle C# ile LDAP üzerinden Active Directory işlemleri yapabileceğiniz metotlardan bahsetmek istiyorum. Genellik "System.DirectoryServices" dll içerisinde bulunan DirectoryEntry classı ile bu işleminizi gerçekleştirebilirsiniz. Aşağıda bununla tüm kullanıcıları listeleyen bir kod paylaşıyorum. Bu yapıya ait classları incelerseniz daha farklı işlemler yapabiliyor olacağınızı belirtmek istiyorum. İkinci sorunuz ise yetkilendirme işlemleri için nasıl bir role düşünceniz var bilemiyorum fakat şunu anladım söylediğinizden, belli yetki grupları olacak ve ben bu tanımlamaları Active Directory üzerinden gerçekleştireceğim diyorsanız en basit kullanıcıya ait attributelerle de bu işlemi gerçekleştirebilirsiniz.
İyi çalışmalar.
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://192.168.1.100/dc=cozumpark,dc=com", "Administrator", "Password");
DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);
directorySearcher.Filter = "(objectCategory=user)";
foreach (SearchResult item in directorySearcher.FindAll())
{
DirectoryEntry directoryEntryItem = item.GetDirectoryEntry();
var aasAMAccountName= directoryEntryItem.Properties["sAMAccountName"].Value;
MessageBox.Show(sAMAccountName.ToString());
}
Kenan Bey,
Bilgilendirmeniz için çok teşekkürler. Bir şey daha sormak istiyorum. Şuan test edebileceğim bir LDAP olmadığı için soruyorum.
Mesela Active Directory'de Organizational Unit oluşturulabiliyor ve bunun altında da kullanıcılar ve kullanıcı grupları. Sistemimiz biraz karmaşık bir yapıya sahip olduğu için belli bir Organizational Unit oluşturup sadece bunun altında bulunan kullanıcılar ve kullanıcı grupları ile çalışabilir miyim?
Yani örnek vermiş olduğunuz kod parçası bana Active Directory içindeki tüm Organizational Unit kullanıcılarını mı verir. Yoksa istediğim Organizational Unit'i kullanabilir miyim? Bu gibi şeyler yapmam mümkün müdür?
Örnek bir senaryo: "Şirket" adında bir Organizational Unit var diyelim. Bunun içinde de şirket içindeki departmanlara ait gruplar var (Mekanik, Elektrik, İnşaat gibi). Ayrıca şirketteki bütün kullanıcılarda bu Organizational Unit altında. Ben mesela yetkilendirme işlemi yaparken, grubu "Mekanik" olan kullanıcıların listesini alıp buna göre işlem yaptırabilmem mümkün mü? Veya yeni bir Organizational Unit oluşturmadan varolan bir unit içinde "Şirket" adında bir grup açıp, istediğim kullanıcıları da bu gruba attıktan sonra. Sadece bu gruba dahil olan kullanıcıları kullanabilir miyim?
Bu sistemin çalışma mantığını tam olarak bilemediğim için böyle biraz karmaşık soru sordum.
Tekrar teşekkürler.
DirectorySearcher classına ait metodlarda bu gibi işlemler yapılabiliyor diye biliyorum. DirectorySearcher classına ait metodları inceleyebilirsiniz.
http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher(v=vs.100).aspx