Добавление пароля пользователя в AD с PHP - PullRequest
0 голосов
/ 12 января 2020

Мой 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);

Все, что за этим фрагмент такой же, как и выше.

Что мне делать? Нужно ли импортировать сертификат на веб-сервер?

1 Ответ

0 голосов
/ 12 января 2020

У нас есть некоторая документация, объясняющая процесс и требования для использования LDAP для Установка и изменение паролей Microsoft Active Directory

. В JAVA есть пример, показывающий, как мы выполнили операцию. Обычно лучше всего создать пользователя, а затем установить значение UnicodePwd. Мы не совсем уверены, почему это так, но возникли проблемы при попытке выполнить обе операции за одну операцию.

Кроме того, часто в зависимости от настроек Microsoft Active Directory пользователи создаются как отключенные, и их может потребоваться включить. быть эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...