Active Directory'de bir kullanıcının kimliğini doğrulamanın, bir kitaplığa ihtiyaç duymadan PHP'de LDAP kullanarak oldukça basit bir işlem olacağını düşünürdünüz. Ancak bunu oldukça hızlı bir şekilde karmaşıklaştırabilecek pek çok şey var:
- Girişi doğrulamalısınız. Aksi takdirde boş bir kullanıcı adı / şifre geçecektir.
- Bağlama sırasında kullanıcı adı / parolanın doğru şekilde kodlandığından emin olmalısınız.
- TLS kullanarak bağlantıyı şifrelemelisiniz.
- Bir arıza durumunda yedeklilik için ayrı LDAP sunucuları kullanmak.
- Kimlik doğrulama başarısız olursa bilgilendirici bir hata mesajı almak.
Çoğu durumda yukarıdakileri destekleyen bir LDAP kitaplığı kullanmak aslında daha kolaydır. Sonunda, yukarıdaki tüm noktaları ele alan kendi kütüphanemi yuvarladım : LdapTools (Sadece kimlik doğrulama için değil, çok daha fazlasını yapabilir). Aşağıdaki gibi kullanılabilir:
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
Yukarıdaki kimlik doğrulama çağrısı:
- Kullanıcı adı veya parolanın boş olmadığını doğrulayın.
- Kullanıcı adı / parolanın doğru şekilde kodlandığından emin olun (varsayılan olarak UTF-8)
- Çalışmama ihtimaline karşı alternatif bir LDAP sunucusu deneyin.
- TLS kullanarak kimlik doğrulama isteğini şifreleyin.
- Başarısız olursa ek bilgi sağlayın (ör. Kilitli / devre dışı bırakılmış hesap, vb.)
Bunu yapacak başka kütüphaneler de var (Adldap2 gibi). Bununla birlikte, en çok oylanan yanıt, TLS kullanmadan ve hiçbir giriş doğrulaması yapılmadan güvenilecek bir güvenlik riski olduğundan, bazı ek bilgiler sağlamak için kendimi yeterince mecbur hissettim.