Изменение пароля пользователя Active Directory в Python 3.x

Я пытаюсь создать сценарий Python, который откроет соединение LDAP с сервером, на котором запущен AD, возьмет запись поиска (в данном случае имя), выполнит поиск этой записи и заменит пароль этого пользователя на случайно сгенерированный пароль (а также установите опцию изменения пароля при входе в систему), а затем отправьте им автоматическое безопасное электронное письмо с новым временным паролем.

До сих пор я был в состоянии соединиться с сервером и искать единственное DN, которое возвращает. Временный пароль генерируется, и электронное письмо отправляется (хотя пароль не хешируется, и электронная почта еще не защищена). Однако я не могу найти никакой информации о том, куда идти отсюда.

я нашелИзменить пароль пользователя Windows с помощью Python однако я вижу, что это плохо работает с AD, а другая документация по LDAP в Python, которую я нашел, кажется устаревшей с 2.x и больше не работает. Документация для ldap3 (https://media.readthedocs.org/pdf/ldap3/stable/ldap3.pdf) также, кажется, ничего не упоминает для этого, и исчерпывающий поиск в Google был бесплодным. Я новичок в этом виде программирования, имея только низкий уровень или академические знания, так что это немного расстраивает, но Python - мой самый сильный язык.

---------------- РЕДАКТИРОВАННЫЙ КОД ДЛЯ ТЕКУЩЕГО СОСТОЯНИЯ -----------------------

#Takes input for name which will be used for search criterion
zid = input("ZID: ")
zid = str(zid).lower()
print(zid)

#Binds session to the server and opens a connection
try:
    server = ldap3.Server('ldap://<IP_Address>', get_info=all)
    conn = ldap3.Connection(server, '%[email protected]' %zid, password = "<something>", auto_bind=True) 
    print("Successfully bound to server.\n")
except:
    print("Unsucessful initialization of <IP_Address>")
    try:
        server = ldap3.Server('ldap://<IP_Address>', get_info=all)
        conn = ldap3.Connection(server, '%[email protected]' %zid, password = "<something>", auto_bind=True) 
        print("Successfully bound to server.\n")
    except:
        print("Unsucessful initialization of <IP_Address>")
        try:
            server = ldap3.Server('ldap://<IP_Address>', get_info=all)
            conn = ldap3.Connection(server, '%[email protected]', password = "<something>", auto_bind=True) %zid 
            print("Successfully bound to server.\n")
        except:
            print("Unsucessful initialization of <IP_Address>")
            sys.exit(0)

#Searches and prints LDAP entries
try:
    base_dn = 'DC=<something>,DC=<something>,DC=<something>,DC=<something>,DC=com'
    zid_filter = '(sAMAccountName=%s)' %zid
    conn.search(base_dn, zid_filter, attributes=['mail'])

    #i.e. "DN: CN=<First Last>,OU=<something>, DC= <something>
    user_dn = str(conn.entries)

    #i.e. "CN=<First Last>"
    front = user_dn.find('C')
    back = user_dn.find(',')
    user_cn = user_dn[front:back]

    #i.e. "<First Last>"
    display_name = user_cn[3:]

    #i.e. "first.last@<something>.com"
    raw_email = str(conn.entries)
    front = raw_email.find('mail: ')
    back = raw_email.find('@<something>.com')
    user_email = raw_email[front + 6:back] + '@<something>.com'
except:
    print("Could not search entries")

#Generates random 12 digit alpha-numeric password
try:
    new_password = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(12))
    print(new_password)
    print("New password successfully generated")
except:
    print("New password could not be generated")


#Set and replace AD Password
try:
    conn.extend.microsoft.modify_password(user_dn, None, new_password)
    print ("Active Directory password was set successfully!")
except:
    print('Error setting AD password')
    sys.exit(0)

Любые предложения о том, как получить / установить пароль пользователя и хешировать пароль в целях безопасности в течение всего этого испытания? Для электронной почты, которую я представляю, я могу заставить ее использовать HTTPS, и этого было бы достаточно, но соединение с сервером, передающее новый_пароль, я бы хотел защитить.

Ответы на вопрос(2)

Ваш ответ на вопрос