Мой API (написанный в PHP) должен зарегистрировать нового пользователя в AD. Как будто атрибут userPassword
не устанавливает пароль пользователя (поэтому он не может войти в систему).
Вещи, которые я пробовал:
- Отправьте пароль в виде обычного текста : nOK
- Отправьте пароль в кодировке Base64: nOK
Я прочитал статью ( см. здесь ) о unicodePwd
и использовании LDAPS , но я не совсем уверен, как это реализовать.
На самом деле я работаю с подключением не-TLS LDAP (это локальная сеть, поэтому мне это не нужно) на Win2k16 (последняя версия ).
Домен secureconnect.online (в моем коде это .local , но не против).
Вот мой код :
public function addUser()
{
// LDAP variables
$ldap_username = $this->ldap_creds['username'];
$ldap_password = $this->ldap_creds['password'];
$ldapuri = $this->ldap_creds['uri'];
// LDAP connection
$link_id = ldap_connect($ldapuri);
if ($link_id) {
ldap_set_option($link_id, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($link_id, $ldap_username, $ldap_password);
$lastname = strtolower($this->validFormData[0]);
$firstname = strtolower($this->validFormData[1]);
$username = $firstname . $lastname;
$display_name = ucwords($firstname) . " " . ucwords($lastname);
$unhashed_pass = $this->validFormData[8];
$encoded_newPassword = "{SHA}" . base64_encode(pack("H*", sha1($unhashed_pass)));
$adduserAD["cn"] = $username;
$adduserAD["givenname"] = ucwords($firstname);
$adduserAD["sn"] = ucwords($lastname);
$adduserAD["sAMAccountName"] = $username;
$adduserAD['userPrincipalName'] = $this->validFormData[2];
$adduserAD["objectClass"] = "user";
$adduserAD["displayname"] = $display_name;
$adduserAD["userPassword"] = $encoded_newPassword;
$adduserAD["userAccountControl"] = "544";
$adduserAD['postalCode'] = $this->validFormData[5];
// Add city
$adduserAD['l'] = $this->validFormData[6];
// Add street address
$adduserAD['streetAddress'] = $this->validFormData[4];
$dn = 'OU=Users-VPN,DC=secureconnect,DC=local';
$base_dn = 'cn=' . $adduserAD['cn'] . ',' . $dn;
$req = ldap_add($link_id, $base_dn, $adduserAD);
if ($req) {
$this->result = $username;
ldap_close($link_id);
} else {
$this->result = '{"error":"Contact Administrator"}';
}
} else {
$this->result = '{"error":"Cannot Connect To Ldap Server"}';
}
return $this->result;
}
Спасибо заранее!
РЕДАКТИРОВАТЬ: Итак, я установил AD LDS с доверенным root сертификатом. Теперь, когда я пытаюсь подключиться через TLS к серверу через мой API, я застреваю в этой ошибке:
Warning: ldap_start_tls(): Unable to start TLS: Can't contact LDAP server
Вот код:
/**
* Method used to add and user to an LDAP annuary.
* @return bool|string
*/
public function addUser()
{
// LDAP variables
$ldap_username = $this->ldap_creds['username'];
$ldap_password = $this->ldap_creds['password'];
$ldapuri = $this->ldap_creds['uri'];
// Connexion LDAP
$link_id = ldap_connect($ldapuri);
if ($link_id) {
ldap_set_option($link_id, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_start_tls($link_id);
echo "yeet";
ldap_bind($link_id, $ldap_username, $ldap_password);
Все, что за этим фрагмент такой же, как и выше.
Что мне делать? Нужно ли импортировать сертификат на веб-сервер?