2009-12-01 46 views
2

我需要验证用户的Windows凭据,给出userId,域和密码。我们的Active Directory中包含多个域,其中一些我们可以使用下面的代码清单:在全局编录中验证用户

var domains = System.DirectoryServices.ActiveDirectory.Forest.GetCurrentForest().Domains; 

然而,我们也有属于森林外域的用户。但是,我可以通过全球目录(GC)访问它们。下面的代码允许我获取用户标识的目录条目。

System.DirectoryServices.DirectoryEntry globalCatalogDE = new System.DirectoryServices.DirectoryEntry("GC://DC=nsroot,DC=net"); 
var ds = new System.DirectoryServices.DirectorySearcher(globalCatalogDE); 
ds.Filter = "(&(objectClass=user)(sAMAccountName=" + userId + "))"; 
System.DirectoryServices.DirectoryEntry userDE = ds.FindAll()[0].GetDirectoryEntry(); 

如何验证属于某个域的用户我无法直接访问该用户,但在GC中可以使用该用户吗?

回答

3

您无法通过查看全局编录来验证用户,它仅用于搜索(每个域的架构中标记为isMemberOfPartialAttributeSet的任何属性都将复制到GC)。

密码不复制到它;否则,从安全和复制的角度来看,每个域控制器上的所有用户的密码都是非常糟糕的。您需要建立到用户凭据存储的域的连接(即,您需要访问LDAP端口389或636)。

+0

听起来合理,足以让我将其标记为答案,即使它没有解决我的问题。 – 2009-12-07 22:04:05