【发布时间】:2019-12-12 17:20:10
【问题描述】:
我正在构建一个使用 LDAP 针对 MS Active Directory 进行身份验证的应用程序。我们有一个用户密码过期的密码政策。
如何在 PHP 中通过 ldap 在不使用 AD 管理员的情况下设置用户密码?
我见过很多方法,但它们都使用管理员帐户,在我看来这存在安全风险。
【问题讨论】:
标签: php active-directory ldap
我正在构建一个使用 LDAP 针对 MS Active Directory 进行身份验证的应用程序。我们有一个用户密码过期的密码政策。
如何在 PHP 中通过 ldap 在不使用 AD 管理员的情况下设置用户密码?
我见过很多方法,但它们都使用管理员帐户,在我看来这存在安全风险。
【问题讨论】:
标签: php active-directory ldap
documentation for the unicodePwd attribute 描述了两种更改密码的方法:
如果我对您的理解正确,您希望避免选项 2。因此,诀窍是在同一个请求中发送“添加”和“删除”请求。为此,您可以使用ldap_modify_batch。其实文档页面本身就有an example of it:
<?php
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);
请注意,您可能必须通过安全连接(LDAPS,通常在端口 636 上)进行连接,以便 AD 允许这样做。
【讨论】: