Получение ошибки:
Сервер не желает выполнять
- Не удалось настроить php + mysql + phpmyadminon iis? что происходит?
- Запустить PHP-скрипт в фоновом режиме при запуске / перезагрузке Apache (Windows Server)
- Как разрешить MySQL на Windows Server для внешнего удаленного доступа?
- PHPMailer загружает некоторое время, а затем дает 500 - ошибка внутреннего сервера
- Отсутствует учетная запись IUSR в Windows Server 2008 R2 / IIS7.5
при изменении unicodePwd в AD через PHP. Однако я могу искать, добавлять, удалять и изменять любые атрибуты пользователей.
Использование учетной записи администратора для привязки и администрирования имеет полные права на изменение паролей для любых пользователей.
Вот код, который я использую:
<?php $dn = "CN=Vishal Makwana,OU=Address Book,DC=example,DC=com"; $ad = ldap_connect("ldap://example.com") or die("Couldn't connect to AD!"); ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); $bd = ldap_bind($ad,"admin@example.com","admin1"); if($bd) { echo "AD bind successfully"; } else { echo "Couldn't bind AD";; } $user["unicodePwd"] = "asdf1234"; $result = ldap_mod_replace($ad, $dn, $user); if ($result) echo "User modified!"; else echo "There was a problem!"; ldap_unbind($ad); ?>
Есть несколько вещей, которые вам нужно, чтобы точно установить пароль в AD через LDAP.
вам нужно использовать SSL-соединение (ldaps: //)
пароль должен быть заключен в кавычки
(цитируемый) пароль должен быть закодирован в 16-разрядном юникоде (UTF-16LE)
Предполагая, что пароль, который вы пытаетесь установить, является обычным символом ascii, преобразование юникода может быть выполнено добавлением 1000 байтов после каждого байта строки ascii, как показано в этом примере кода .
Таким образом, ваш пример будет выглядеть так:
$newpassword = "asdf1234"; $newpassword = "\"" . $newpassword . "\""; $len = strlen($newpassword); for ($i = 0; $i < $len; $i++) $newpass .= "{$newpassword{$i}}\000"; $user["unicodePwd"] = $newpass;
После долгого поиска и много времени, я наконец смог изменить пароль пользователя активного каталога из PHP-кода, используя библиотеку LDAP.
Нам нужно соединение LDAP с активным сервером каталогов из кода PHP; и вам нужно изменить поле unicodePwd
.
ldap_connect(ldaps://IP, 636); ldap_connect(ldaps://IP, 389);