Я только начинаю работать с LDAP и Windows Server 2012. Мне удалось заставить мой PHP-код привязываться к Active Directory с помощью учетной записи администратора, но я могу создать нового пользователя с помощью функции ldap_add.
Я запускаю Windows Server 2012 R2 и IIS 8. Я установил центр сертификации с корневым сертификатом предприятия, и я могу подключиться к AD с помощью ldp.exe с SSL-соединением.
Я просмотрел Google, а также «возможные повторяющиеся темы», но ни один из них не предоставил мне рабочий ответ за последние пару часов, которые я искал.
Когда я использую следующий код PHP:
<?php $ldaprdn = 'netclass\Administrator'; $ldappass = 'password here'; $ldapconn = ldap_connect('ldap://server.netclass.co.uk') or die("Could not connect to LDAP server."); if ($ldapconn) { // binding to ldap server $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); // verify binding if ($ldapbind) { echo "LDAP bind successful..."; } else { echo "LDAP bind failed..."; } // prepare data $info["givenname"] = "Ronnie Brown"; $info["samaccountname"] = "br01"; $info["objectclass"] = "person"; // add data to directory $r = ldap_add($ldapconn, "cn=Ronnie,dc=netclass,dc=co,dc=uk", $info); //Line 28 } ?>
Я получаю вывод:
LDAP bind successful... Warning: ldap_add(): Add: Server is unwilling to perform in C:\inetpub\wwwroot\adduser.php on line 28
Я попытался включить SSL, изменив:
$ldapconn = ldap_connect('ldap://server.netclass.co.uk')
в
$ldapconn = ldap_connect('ldaps://server.netclass.co.uk')
Но я получаю следующую ошибку:
Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in C:\inetpub\wwwroot\adduser.php on line 12 LDAP bind failed... Warning: ldap_add(): Add: Can't contact LDAP server in C:\inetpub\wwwroot\adduser.php on line 28
Мне удалось решить ответ сегодня.
Я добавил следующую строку в /etc/ldap/ldap.conf
TLS_REQCERT never
После этого я смог подключиться, но все еще получал сообщение об ошибке:
Server Unwilling to Perform
Это было потому, что я пытался установить простой текст пароля:
$ldaprecord["unicodepwd"] = 'MyPassword1234'
Сначала вам нужно закодировать его, поэтому, как только я изменю свой код на это, он работает:
## Create Unicode password ## Assumes that given password is in UTF-8 encoding! ## Adjust it to the actual encoding of the password $pwdtxt = "MyPassword1234"; $newPassword = '"' . $pwdtxt . '"'; $newPass = iconv( 'UTF-8', 'UTF-16LE', $newPassword ); $ldaprecord["unicodepwd"] = $newPassw;
Надеюсь, это поможет кому-то!