为新的 LDAP 用户设置密码

set password for new LDAP user

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

到目前为止我尝试了什么:

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

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

提前致谢。

编辑:

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

使用 IIS 开发 Windows 2012 R2。

根据 this Microsoft article 看来密码存储在字段 unicodePwd 中,只能设置不能读取。除此之外,NTLM-Hash 和 NT-Hash 可以存储在 SAM 数据库中(这是 AFAIK,无法通过 LDAP 访问),因此您在通过 LDAP 更改密码时不会有太多运气。

虽然在上述网站上有一篇关于如何通过 LDAP 更改 Windows200-密码的文章。

首先我按照@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");

奇怪的是AD添加用户时好像不能设置密码(有办法指正)。相反,您必须在之后设置密码:

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

使用 ldap_add() 设置密码对我不起作用。 pwdLastSet是强制用户登录后修改密码,$member是用户的"ID"(如:CN=johndoe, ou=person, dc=mycompany)。确保 在 "CN=".

之后使用唯一键

谢谢大家的帮助。