在windows服务器2008中使用PHP更改LDAP用户密码



我想让我的active directory用户用PHP代码从链接表单更改他们的密码。当我使用ldap_modify函数时,它更改了邮件,但从未更改密码,但它回复了成功消息。我用这个来加密密码:

$encoded_newPassword = "{SHA}" . base64_encode( pack( "H*", sha1( $newPassword ) ) );

要更改密码,需要按照文档中描述的unicodePwd属性的过程和格式进行操作。您必须在同一请求中执行两个操作:

  • 包括旧密码的删除操作,以及
  • 包含新密码的添加操作

并且两个密码都必须采用特定的格式。

要在PHP中执行此操作,请使用ldap_modify_batch。在ldap_modify_batch的文档中,有一个如何更改密码的示例:

function adifyPw($pw)
{
return iconv("UTF-8", "UTF-16LE", '"' . $pw . '"');
}
$dn = "cn=Jack Smith-Jones,ou=Wizards,dc=ad,dc=example,dc=com";
$modifs = [
[
"attrib"  => "unicodePwd",
"modtype" => LDAP_MODIFY_BATCH_REMOVE,
"values"  => [adifyPw("Tr0ub4dor&3")],
],
[
"attrib"  => "unicodePwd",
"modtype" => LDAP_MODIFY_BATCH_ADD,
"values"  => [adifyPw("correct horse battery staple")],
],
];
ldap_modify_batch($connection, $dn, $modifs);

最新更新