仅在Active Directory中轮询密码更改的推荐方法是什么,获取更新的密码并在其他位置更新?
我已经查看了System.DirectoryServices.Protocols命名空间中的类,如'DirectoryNotificationControl'类,但似乎这会轮询任何属性,稍后我们需要查询以查看我们感兴趣的属性(密码)是否确实已更改。
另外我们如何从活动目录中获取密码值?虽然非常复杂,但可以使用LSA。
答案 0 :(得分:3)
唯一的“简单”方式(那些围绕“简单”的非常大的引用)是编写一个托管在域控制器上的Password Filter Dll。
您可以实现PasswordChangeNotify界面,并让您的代码更新任何需要通知密码更改的外部事件。
但是必须在本机代码中完成,因此不允许使用C#。
我最初走这条路并最终放弃了它,并使用了一种不同的方法来跟踪更改的密码,但我在此过程中发现的一件事是一个名为passwdhk的开源项目,可能是对你有所帮助。
passwdhk所做的是它为您实现了一个密码过滤器DLL,但是所有过滤器都会使用命令行参数启动另一个可执行文件,其中传入密码更改通知功能(“更改后程序”正在转发来自PasswordChangeNotify的参数,“更改前程序”是从PasswordFilter转发参数。这使您仍然可以编写更新C#中其他服务的代码,只需从命令行输入密码,而不是截取密码本身。
答案 1 :(得分:0)
据我所知,默认情况下,无法在Active-Directory中读取密码(以加密方式存储)。您可以更改策略以可逆方式存储它,但这确实不是一件好事。
我知道的唯一方法是在每台客户端计算机上安装一个组件。该组件捕获密码更改,您可以执行您想要的操作。
从NT到XP,这个组件被称为GINA(DLL)。从Vista开始,这个组件应该使用Credential Provider API编写。