2013-09-07 2 views
2

Каков рекомендуемый подход для изменения пароля для голосования только в Active Directory, получить обновленный пароль и обновить где-нибудь еще?Опрос только на изменение пароля в Active Directory

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

Также как мы получаем значение пароля из активного каталога? Возможно использование LSA, хотя и очень сложное.

+0

Возможно использование LSA, хотя очень сложный ... – user1576882

ответ

0

Насколько я знаю, по умолчанию пароль (хранимый в зашифрованном виде) не может быть прочитан в Active Directory. Вы можете изменить политику, чтобы сохранить ее обратимым образом, но это действительно не очень хорошо.

Единственный способ, которым я знаю, - установить компонент на каждом клиентском компьютере. Компонент поймает изменение пароля, и вы можете делать то, что хотите.

От NT to XP этот компонент был назван GINA (DLL). Начиная Vista, этот компаньон должен быть написан с использованием API-интерфейса Credential.

3

Единственный «простой» способ (и это ОЧЕНЬ большие цитаты вокруг «простых») заключается в том, чтобы написать Password Filter Dll, размещенный на контроллере домена.

Вы можете реализовать интерфейс PasswordChangeNotify и обновить свой код независимо от того, что необходимо для уведомления об изменении пароля.

Однако это должно быть сделано в собственном коде, поэтому C# не разрешено.


Первоначально я пошел по этой дороге, и в конечном итоге отказ от него и использовать другой метод отслеживания измененных паролей, однако одна вещь, которую я обнаружить по пути был проект с открытым исходным кодом под названием passwdhk, которые могут быть полезно для вас.

Что делает passwdhk, он реализует DLL для фильтра паролей для вас, однако весь фильтр выполняет запуск другого исполняемого файла с аргументами командной строки, которые передаются в функцию уведомления о смене пароля (программа «пост-изменение» пересылает аргументы от PasswordChangeNotify, «программа предварительной смены» пересылает аргументы от PasswordFilter). Это позволяет вам писать код, который обновляет другую службу на C#, просто берет пароль из командной строки, а не перехватывает сам пароль.

+0

+1 Правильно, я забыл об этом. Но он должен быть реализован на каждом контроллере домена или только на одном с определенной ролью? – JPBlanc

+0

@JPBlanc с [этой страницы MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms721884%28v=vs.85%29.aspx) "* Все контроллеры домена могут быть записаны, поэтому пакеты фильтров паролей должны присутствовать на всех контроллерах домена. ** Домены Windows NT 4.0: ** Уведомление об учетных записях домена происходит только на основном контроллере домена. В дополнение к основному контроллеру домена пакеты фильтров паролей должны быть установленных на всех контроллерах домена резервного копирования, чтобы разрешить уведомления в случае изменения роли сервера. * " –

Смежные вопросы