Это не так - и это не что-то особенное для Python.Microsoft поставила веб-сайт для смены пароля на основе ASP, который вы можете запустить на контроллере домена, и у сайта MS было то же ограничение.Если пароль пользователя уже истек или пользователь должен был изменить свой пароль при следующем входе в систему, вы застряли.
Два подхода:
(1) Создайте сброс пароля самообслуживанияфункциональность, которая проверяет подлинность пользователя по чему-то другому, кроме пароля его учетной записи AD - хэшированные атрибуты, хранящиеся в его объекте пользователя, вопросы о вызове / ответе, которые хранятся в таблице базы данных, и т. д. При условии, что пользователь проходит вторичную проверку подлинности, учетные данные администратора используются длясбросить пароль
(2) Специально для пользователей, которые должны изменить пароль при следующем входе в систему, атрибуту pwdLastSet будет присвоено значение «0», когда пользователь должен изменить свой пароль.Используя системные учетные данные с доступом на запись к значению, измените это значение на -1. Затем связать с учетной записью и паролем, предоставленными пользователем.Если привязка не удалась, установите pwdLastSet обратно на 0. Если привязка прошла, измените пароль.
# 1 - это больше времени / усилий, но он сортирует людей с паролями с истекшим сроком, людей, которым нужно сменить пароль при следующем входе в систему, людей, которые заблокированы, и людей, которые забыли свой пароль.«Люди, которые забыли свой пароль / были заблокированы», как правило, являются большой победой - сокращение количества обращений в службу поддержки может компенсировать время / деньги, потраченные на разработку сброса пароля самообслуживания.
# 2 намного проще, но обрабатывает только один сценарий, который вы представляете.Если для домена задан максимальный срок действия пароля (или политика детализированных паролей, которая устанавливает максимальный срок действия пароля для некоторых учетных записей пользователей), пользователи с просроченными кредитами все равно могут застрять.