【问题标题】:Crazy LDAP (AD) password update problem (php)疯狂的 LDAP (AD) 密码更新问题 (php)
【发布时间】: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


【解决方案1】:

如果有人遇到同样的问题:

几天前我读了一篇文章,其中提到了所描述行为的原因 这是 Windows AD 的一项“功能”,可在更改密码后一小时内保持用户的旧密码有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2010-10-11
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多