Symfony 不尊重 Active Directory 约束

问题描述 投票:0回答:1

我有这个方法来更改AD用户密码:

  public function changePassword($ldapUserIdentifier, $oldPassword, $newPassword): string
    {


        try {

            $this->ldap->bind("DOMAIN\\".$ldapUserIdentifier, $oldPassword);
            $query = $this->ldap->query('dc=domain,dc=com', '(&(sAMAccountName=' . $ldapUserIdentifier . '))');
            $result = $query->execute();
            $entry = $result[0];
            $newPassword = mb_convert_encoding('"' . $newPassword . '"', 'utf-16le');
            $entryManager = $this->ldap->getEntryManager();
            $entryManager->applyOperations($entry->getDn(), [
                new UpdateOperation(LDAP_MODIFY_BATCH_REPLACE, 'unicodePwd', [$newPassword])
            ]);
            dd("wait");
        } catch (\Throwable $th)
{dd($th);
            return $th->getMessage();
        }

效果很好,但脚本不关心 AD 约束。 我的 Active Directory 限制是:

  1. 不能使用最后6个密码

但是我的代码不遵守这个约束。

我想尊重AD约束

symfony active-directory passwords
1个回答
0
投票

过了很多天,我解决了这个问题。

在这种情况下:

            $entryManager->applyOperations($entry->getDn(), [
            new UpdateOperation(LDAP_MODIFY_BATCH_REPLACE, 'unicodePwd', [$newPassword])
        ]);

Active Directory 认为他需要重置密码并需要管理员帐户。

在这种情况下:

            $entryManager->applyOperations($entry->getDn(), [
            new UpdateOperation(LDAP_MODIFY_BATCH_REMOVE, 'unicodePwd', [$oldPassword]),
            new UpdateOperation(LDAP_MODIFY_BATCH_ADD, 'unicodePwd', [$newPassword])
        ]);

Active Directory 认为他需要更改密码并且不需要管理员帐户。

参见此处https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/6e803168-f140-4d23-b2d3-c3a8ab5917d2

或这里:

PHP-LDAP 更改密码

© www.soinside.com 2019 - 2024. All rights reserved.