Разрешить пользователям AD изменять свои пароли с помощью Python ldap3 - PullRequest
0 голосов
/ 21 сентября 2018

Я использую Python ldap3 [1] для создания API, который позволяет пользователям изменять свои пароли Microsoft Active Directory, используя свои текущие учетные данные.Вот что делает мой API:

1- Создание подключения LDAP и привязка к серверу LDAP:

tls_config = Tls(validate=ssl.CERT_NONE) server = Server(ldaps_endpoint, port = 636, use_ssl = True, tls = tls_config) connection = Connection(server, user=username, password=password, authentication='NTLM') connection.bind()

2 - Смена пароля с помощью функции extend.microsoft.modifyPassword.ad_modify_password() ldap3:

user_modified = extend.microsoft.modifyPassword.ad_modify_password(connection, user_dn, new_password, current_password)

Это прекрасно работает, когда пользовательский флаг сменить пароль при следующем входе в систему не установлен.Когда это установлено, это не работает, потому что соединение не в bind().Я попытался использовать ANONYMOUS соединение вместо NTLM, которое успешно связывается.Однако функция ad_modify_password() завершается с ошибкой:

Чтобы выполнить эту операцию, необходимо выполнить успешное связывание для соединения

Как ad_modify_password() долженработать с сменить пароль при следующем флаге входа ?

[1] https://ldap3.readthedocs.io/

1 Ответ

0 голосов
/ 28 сентября 2018

Это не так - и это не что-то особенное для Python.Microsoft поставила веб-сайт для смены пароля на основе ASP, который вы можете запустить на контроллере домена, и у сайта MS было то же ограничение.Если пароль пользователя уже истек или пользователь должен был изменить свой пароль при следующем входе в систему, вы застряли.

Два подхода:

(1) Создайте сброс пароля самообслуживанияфункциональность, которая проверяет подлинность пользователя по чему-то другому, кроме пароля его учетной записи AD - хэшированные атрибуты, хранящиеся в его объекте пользователя, вопросы о вызове / ответе, которые хранятся в таблице базы данных, и т. д. При условии, что пользователь проходит вторичную проверку подлинности, учетные данные администратора используются длясбросить пароль

(2) Специально для пользователей, которые должны изменить пароль при следующем входе в систему, атрибуту pwdLastSet будет присвоено значение «0», когда пользователь должен изменить свой пароль.Используя системные учетные данные с доступом на запись к значению, измените это значение на -1. Затем связать с учетной записью и паролем, предоставленными пользователем.Если привязка не удалась, установите pwdLastSet обратно на 0. Если привязка прошла, измените пароль.

# 1 - это больше времени / усилий, но он сортирует людей с паролями с истекшим сроком, людей, которым нужно сменить пароль при следующем входе в систему, людей, которые заблокированы, и людей, которые забыли свой пароль.«Люди, которые забыли свой пароль / были заблокированы», как правило, являются большой победой - сокращение количества обращений в службу поддержки может компенсировать время / деньги, потраченные на разработку сброса пароля самообслуживания.

# 2 намного проще, но обрабатывает только один сценарий, который вы представляете.Если для домена задан максимальный срок действия пароля (или политика детализированных паролей, которая устанавливает максимальный срок действия пароля для некоторых учетных записей пользователей), пользователи с просроченными кредитами все равно могут застрять.

...