LDAP连接AD修改用户密码分析--server is unwilling to perform
通过LDAP设置AD中用户密码必须满足非常严格的三个条件,否则会提示Warning:server is unwilling to perform。
-
必须使用SSL方式连接AD(ldaps://);
-
密码必须使用引号括起来;
-
引号中的密码必须使用16位unicode编码(UTF-16LE);
假设你要重置的密码是使用普通的ascii码编码,那么代码的转换可以通过如下的方式实现,即:将原ascii码编码的密码中每一个字符\000后,再拼接到一起,就可以转换成16位unicode编码。代码示例如下:
点击(此处)折叠或打开
-
$newpassword = "iaaat@111111";
-
$newpassword = "\"" . $newpassword . "\"";
-
$len = strlen($newpassword);
-
for ($i = 0; $i < $len; $i++) $newpass .= "{$newpassword{$i}}\000";
- $entry["unicodePwd"] = $newpass;
-
$newpassword = "iaaat@111111";
个人认为配置使用SSL方式连接AD(ldaps://域名或者IP)是非常繁琐的,并且有些无厘头的步骤,目前基本成功了。我的环境是:windows server 2012(AD服务器), php 5.4.15,apache2.2(on windows),windows 7(LDAP 客户端)。欢迎大家共同交流~