为新的 LDAP 用户设置密码

MrS*_*ith 4 php passwords ldap

我一直在尝试用 PHP 创建 Windows 用户帐户,这本身没有问题。我唯一不能做的就是将windows用户密码设置为公司标准密码。除了密码之外,我可以毫无问题地创建、更改和删除用户帐户。每次我创建一个用户并尝试使用凭据登录时,我得到的只是“用户名或密码错误”。我检查了用户名。

到目前为止我尝试过的:

  • ldapp_add有明确的密码 ( $ldaprecord['userPassword'] = "standard";)
  • $ldaprecord['userPassword'] = '{MD5}' . base64_encode(pack('H*',md5($newuser_plaintext_password)));就像在php.net的给定示例中一样
  • 添加用户后尝试更改密码看到这个

似乎我可以更改,$ldaprecord['userPassword']但是当我尝试更改ldaprecord['unicodePwd']服务器时,它不愿意执行我的请求。哪个是正确的密码?

我没有通过 SSL 连接到 AD。这是我的错误吗?如果是这样,为什么我可以删除用户但不能设置他们的密码?

提前致谢。

编辑:

要求系统管理员通过 SSL 建立连接,但他说轻量级目录服务甚至没有安装在 DC 上。在他看来,我直接在 AD 上工作。对此有什么想法吗?

使用 IIS 在 Windows 2012 R2 上工作。

MrS*_*ith 5

首先,我按照@ChadSikorra 告诉我的去做:我创建了文件夹/文件C:\OpenLDAP\sysconf\ldap.conf并添加了行TLS_REQCERT never. 然而,这并没有帮助,ldap_start_tls()但我们的系统管理员检查了 DC,发现域控制器证书没有安装。所以我终于可以建立一个连接,通过ldap_connect("ldaps://mydomaincontroller");这意味着我可以设置 - 属性unicodePwd

下一个问题是unicodePwd. 这是要走的路:

$newPassword = "mypassword";
$newPassword = "\"" . $newPassword . "\"";
$newPass = mb_convert_encoding($newPassword, "UTF-16LE");
Run Code Online (Sandbox Code Playgroud)

奇怪的是,在将用户添加到 AD 时似乎无法设置密码(如果有办法请纠正我)。相反,您必须在之后设置密码:

$result = ldap_add(...);
$entry = array(
    "unicodePwd" => "$newPass",
    "pwdLastSet" => 0
);
ldap_modify($connect, $member, $entry);
Run Code Online (Sandbox Code Playgroud)

设置密码ldap_add()对我不起作用。pwdLastSet强制用户在登录后更改密码并且$member是用户的“ID”(例如:)CN=johndoe, ou=person, dc=mycompany。确保在“CN=”之后使用唯一键。

谢谢你们的帮助。