6

收到错误:

服务器不愿意执行

同时通过 PHP 更改 AD 中的 unicodePwd。但是,我可以搜索、添加、删除和修改用户的任何属性。

使用Administrator账号绑定,admin拥有修改任何用户密码的完全权限。

这是我正在使用的代码:

<?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);
?>
4

2 回答 2

9

要通过 LDAP 在 AD 中设置密码,您需要做很多事情。

  • 您需要使用 SSL 连接 (ldaps://)

  • 密码需要用引号引起来

  • (引用的)密码需要以 16 位 unicode (UTF-16LE) 编码

假设您尝试设置的密码是普通 ascii 字符,则可以通过在 ascii 字符串的每个字节后添加一个 \000 字节来完成 unicode 转换,如此代码示例所示。

所以你的例子看起来像:

$newpassword = "asdf1234";
$newpassword = "\"" . $newpassword . "\"";
$len = strlen($newpassword);
for ($i = 0; $i < $len; $i++) $newpass .= "{$newpassword{$i}}\000";
$user["unicodePwd"] = $newpass;
于 2012-05-26T05:01:45.577 回答
2

经过大量搜索并花费大量时间,我终于能够使用 LDAP 库从 PHP 代码修改活动目录用户密码。

我们需要 LDAP 与 PHP 代码中的活动目录服务器的连接;并且您必须修改该unicodePwd字段。

ldap_connect(ldaps://IP, 636);
ldap_connect(ldaps://IP, 389);
于 2012-06-14T14:09:00.323 回答