C# framework, Active Directory (LDAP) bazlı kullanıcı doğrulama yani otantikasyon (login) işlemi konusunda bize iki yol sunmaktadır. Birincisi PrincipalContext diğeri ise DirectoryEntry sınıflarıdır.

Bu Classlar System.DirectoryServices ve System.DirectoryServices.AccountManagement namespace’i altındadır. Aynı isimli paketleri yüklemeniz gerekmektedir. DirectoryEntry class’ı ise oldukca eskidir. Yaygın olarak kullanılmaktadır ve birçok eski framework versiyonun tarafından desteklenmektedir.

İlgili paketleri Nuget ile kurabilirsiniz:

Paketler: System.DirectoryServices, System.DirectoryServices.AccountManagement (Microsoft)

PrincipalContext class’ı Framework 4 versiyonunuyla kullanılmaya başlanmıştır. Şuanda net6.0 ile desteklenmekle birlikte net.core 3.1’den itibaren desteklenmektedir ve login işlemini kolaylıkla yapabileceğimiz ValidateCredentials methodunu sunmaktadır. ValidateCredentials metodu kullanıcı adı ve şifreyi girdi alarak ldap oturum açma işlemi yapar, eğer başarılı ise boolean dönüşü true olmaktadir. Oturum açılamamışsa false dönüş sağlar.

Bu iki class’ı da ayrı ayrı örneklendireceğim. Login sonrası otorizasyonu konusu programcıya bırakıyorum.

PrincipalContext ile oturum açma örneği:

public class Class2
{
    public bool login()
    {
        bool loginBasarili = false;
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "domain.local"))//domain adı.
        {
            //işlemler
            loginBasarili = pc.ValidateCredentials("username", "password");//kullanıcı adı ve şifre
            //işlemler
        }
        return loginBasarili;
    }
}

DirectoryEntry ile oturum açma örneği: 

DirectoryEntry sınıfında ise sınıf new edildiğinde girilen parametrelerle domainde oturum açma isteği yapılır. Eğer Dönen obje null olmayıp, Properties propertysi yüklenmiş ve içeriği 0’dan büyük ise oturum başarılıdır. Değilse işlem başarısızdır. Alt kısımda örneği verilmiştir.

public bool login2()
{
    DirectoryEntry myDomain = new DirectoryEntry("LDAP://domain.local", "username", "password");//domain adı,kullanıcı adı şifre
    bool loginBasarili = false;
    
    //işlemler
    //Eğer dönen property var ise login olunmuştur.
    if (myDomain.Properties.Count > 0)
        loginBasarili = true;
    //işlemler

    return loginBasarili;
}

 

Kategoriler: CSharp