C# ile Kullanıcı sorgulama işlemleri Framework 3.5 den itibaren PrincipalContext ve UserPrincipal ile kolay bir şekilde yapılmaktadır. Eskiden DirectoryEntry, DirectorySearcher ile sorgulama yapılmaktaydı ve işlem oldukça zordu. Principal ile bu konuya kolaylık kazandırılmış olduğu görülmektedir.
Öncelikle PrincipalContext class’ından bir obje oluşturulur ve domain bilgileri girilir. Domain Bilgilerinde ContextType enum’u ile erişilen kaynağın bir domain olduğu belirtilmelidir. Domain adresi olarak örneğimizde domain.local kullandık, kullanıcı adı ve şifre (username,password) olarak standart yetkiye sahip bir kullanıcı hesabının bilgileri girilebilir. (domain_standart_user: herhangi bir standart kullanıcı, domain_standart_user_pass: yazdığınız kullanıcının şifre bilgisi)
Sonrasında UserPrincipal class’ından bir objeye static sınıfından FindByIdentity metodu içerisinde principalcontext objesi ile çalıştırılır. Burada try catch kullanmak benim tercihimdi. Sizede öneririm zira domain’e erişilip erişilmediği ayrıca kullanıcın olup olmadığı da önemlidir.
Bu bağlamda domainbilgileri isimli bir sınıf da oluşturarak işi hem düzenli hemde verimli hale getirebiliriz.
Örnek Kodlar:
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "domain.local", "domain_standart_user", "domain_standart_user_pass"); UserPrincipal userPrincipal = null; //domain bilgileri sonradan olusturdugumuz bir classtir. //objesi uretilip icerisinde domainden aldigimiz verileri koyuyoruz. //bu objeyi ister bir metoda dönüş verebilir ister buton_click'inde kullanabilir //isterseniz de kullanmayabilirsiniz. DomainBilgileri domainbilgi = new DomainBilgileri(); try { userPrincipal = UserPrincipal.FindByIdentity (principalContext, IdentityType.SamAccountName, username); domainbilgi.isAccessSuccess = true; } catch { domainbilgi.isAccessSuccess = false; return domainbilgi; } if (userPrincipal == null) { domainbilgi.isAccountFound = false; return domainbilgi; } if (userPrincipal.SamAccountName == "") { domainbilgi.isAccountFound = false; return domainbilgi; } domainbilgi.isAccountFound = true; domainbilgi.AdiSoyadi = userPrincipal.DisplayName; domainbilgi.Email = userPrincipal.EmailAddress; domainbilgi.SonOturumTarihi = userPrincipal.LastLogon.ToString(); domainbilgi.SifreDegistirmeTarihi = userPrincipal.LastPasswordSet.ToString(); if (userPrincipal.Enabled != null) { if (userPrincipal.Enabled == true) domainbilgi.IsActive = true; else domainbilgi.IsActive = false; } else domainbilgi.IsActive = false; if (userPrincipal.IsAccountLockedOut()) domainbilgi.IsLocked = true; else domainbilgi.IsLocked = false; userPrincipal = null; principalContext = null;
DomainBilgileri Class’ı:
public class DomainBilgileri { public bool isAccessSuccess { get; set; } public bool isAccountFound { get; set; } public string AdiSoyadi { get; set; } public string Email { get; set; } public string SonOturumTarihi { get; set; } public string SifreDegistirmeTarihi { get; set; } public bool IsActive { get; set; } public bool IsLocked { get; set; } public List UserGrupUyelikleri { get; set; } }