使用 windows 服务器 2008 中的 PHP 更改 LDAP 用户密码
Change LDAP user password using PHP in windows server 2008
我想让我的 Active Directory 用户使用 PHP 代码从链接表单更改他们的密码。
当我使用 ldap_modify 功能时,它会更改邮件但不会更改密码,但会回复成功消息。
我用这个来加密密码:
$encoded_newPassword = "{SHA}" . base64_encode( pack( "H*", sha1( $newPassword ) ) );
要更改密码,您需要按照documentation for the unicodePwd
attribute中描述的程序和格式进行操作。您必须在同一个请求中执行两个操作:
- 包含旧密码的删除操作,以及
- 包含新密码的添加操作
并且两个密码都必须采用特定格式。
要在 PHP 中执行此操作,您需要使用 ldap_modify_batch
。在 ldap_modify_batch
there is an example of how to do a password change 的文档中:
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);
我想让我的 Active Directory 用户使用 PHP 代码从链接表单更改他们的密码。 当我使用 ldap_modify 功能时,它会更改邮件但不会更改密码,但会回复成功消息。 我用这个来加密密码:
$encoded_newPassword = "{SHA}" . base64_encode( pack( "H*", sha1( $newPassword ) ) );
要更改密码,您需要按照documentation for the unicodePwd
attribute中描述的程序和格式进行操作。您必须在同一个请求中执行两个操作:
- 包含旧密码的删除操作,以及
- 包含新密码的添加操作
并且两个密码都必须采用特定格式。
要在 PHP 中执行此操作,您需要使用 ldap_modify_batch
。在 ldap_modify_batch
there is an example of how to do a password change 的文档中:
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);