【发布时间】:2021-02-04 13:06:46
【问题描述】:
通过 PHP ldap API 更新 AD 用户的密码时,我遇到了一个疯狂的问题。
这是我用来更新密码的函数(类的一部分):
function updatePassword($newPassword){ // works only with LDAPS (LDAP WITH SSL/TLS ENCRYPTION)
$newPassword = "\"". $newPassword. "\"";
$newPassw = "";
$len = strlen($newPassword);
for($i = 0; $i < $len; $i++){
$newPassw .= "{$newPassword{$i}}\000";
}
$newPassword = $newPassw;
//$newPassword = mb_convert_encoding($newPassword, "UTF-16LE");
$newEntry = array("unicodePwd" => $newPassword);
$dn = $this->getUserInformation()["distinguishedname"];
if(ldap_mod_replace($this->connection, $dn, $newEntry)){
return true;
}
return ldap_error($this->connection);
}
用户更新密码后,新密码有效,但很长一段时间内,旧密码仍然有效。这样用户就可以使用他的新密码和旧密码登录到我们的网络应用程序和 windows...
有人有想法或知道问题可能是什么吗?
(一些背景信息:
- AD DC 服务器:Windows Server 2019 / Windows Server 2016
- 网络服务器:Debian 9 和 Apache 2 (2.25)
- PHP 版本 7.4 )
【问题讨论】:
-
可能是复制问题还是域足够小以至于复制不是问题?
-
不,复制不可能是问题,我也试过只有一个DC在线,可以响应ldap请求。
标签: php windows web active-directory ldap