C# 仅轮询Active Directory中的密码更改

C# 仅轮询Active Directory中的密码更改,c#,active-directory,C#,Active Directory,仅在Active Directory中轮询密码更改、获取更新的密码和在其他位置更新密码的建议方法是什么 我研究了System.DirectoryServices.Protocols命名空间中的类,如“DirectoryNotificationControl”类,但似乎这将轮询任何属性,稍后我们需要查询以查看我们感兴趣的属性(密码)是否确实已更改 另外,我们如何从active directory获取密码值?可以使用LSA,尽管非常复杂。据我所知,默认情况下,在Active Directory中无法

仅在Active Directory中轮询密码更改、获取更新的密码和在其他位置更新密码的建议方法是什么

我研究了System.DirectoryServices.Protocols命名空间中的类,如“DirectoryNotificationControl”类,但似乎这将轮询任何属性,稍后我们需要查询以查看我们感兴趣的属性(密码)是否确实已更改


另外,我们如何从active directory获取密码值?可以使用LSA,尽管非常复杂。

据我所知,默认情况下,在Active Directory中无法读取密码(以加密方式存储)。您可以更改策略以可逆方式存储它,但这确实不是一件好事

我知道的唯一方法是在每台客户机上安装一个Component。该组件捕获密码更改,您可以执行您想要的操作

从NT到XP,这个组件被称为GINA(DLL)。Begining Vista这家公司应该使用凭据提供程序API编写。

唯一的“简单”方法(这些都是围绕“简单”的大引号)是编写托管在域控制器上的

您可以实现该接口,并让您的代码更新任何需要通知密码更改的外部内容

但是,这必须在本机代码中完成,因此不允许使用C


我最初沿着这条路走下去,最终放弃了它,并使用了一种不同的方法来跟踪更改的密码,然而,在这一过程中我确实发现了一件事,那就是一个名为“可能对您有帮助”的开源项目


passwdhk所做的是为您实现一个密码过滤器DLL,但是过滤器所做的只是启动另一个带有命令行参数的可执行文件,该命令行参数传递给密码更改通知函数(“更改后程序”从中转发参数,“更改前程序”从中转发参数)。这允许您仍然编写代码来更新C#中的其他服务,它只是从命令行获取密码,而不是截取密码本身。

使用LSA是可能的,尽管非常复杂…+1对,我忘记了这个。但是它应该在每个域控制器上实现,或者只在一个具有特定角色的域控制器上实现?@JPBlanc from“所有域控制器都是可写的,因此所有域控制器上都必须存在密码筛选器包。Windows NT 4.0域:域帐户通知仅在主域控制器上发生。除主域控制器外,应在所有备份域控制器上安装密码筛选器包,以便在服务器角色更改时继续通知。“