繁体   English   中英

PHP-LDAP无需使用管理员帐户即可在Active Directory中更改用户密码

[英]PHP - LDAP change user passwords in Active Directory without using administrator account

我正在构建使用LDAP针对MS Active Directory进行身份验证的应用程序。 我们有一个密码政策,其中用户密码会过期。

如何通过PHP中的ldap在不使用AD管理员的情况下设置用户密码?

我见过很多方法,但所有方法都使用管理员帐户,从我的角度来看,这是一种安全风险。

unicodePwd属性文档描述了两种更改密码的方法:

  1. 在同一LDAP请求中发送“删除”和“添加”操作。 这使用旧密码作为更改密码的授权。 如果用户在Windows中执行Ctrl + Alt + Del->更改密码,这通常就是他们自己做的事情。
  2. 发送“替换”操作,与管理员重置密码相同。 这要求您已经使用有权重置密码的帐户进行了身份验证。

如果我对您的理解正确,那么您将避免使用选项2。因此,诀窍将是在同一请求中发送“添加”和“删除”请求。 为此,您可以使用ldap_modify_batch 实际上,在文档页面本身上有一个示例

<?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才能允许此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM