我有用C#編寫的測試工具。使用System.DirectoryServices.AccountManagement;我正在通過虛擬服務器(LDAP)在遠程計算機上創建一個到Active Directory的PrincipalContext連接。Active Directory LDAP,提高讀取組的權限..?
我100%能夠連接到活動目錄,並使用用戶名和密碼(UserPrincipal.FindByIdentity,然後context.ValidateCredentials)進行身份驗證。我不能讀取羣組。它撤回默認的,如域用戶。 如果我將該實用程序作爲虛擬服務器(不是AD中存在的用戶)的本地管理員運行,那麼突然間我可以使用相同的確切參數從Active Directory中獲取所有指定用戶的組。
這怎麼可能?我錯過了什麼?
我的代碼如下,雖然我相信問題與代碼完全無關,如上所述,運行提升時可以正常工作。
g_context = new PrincipalContext(ContextType.Domain, this.USERDOMAIN);
g_principal = UserPrincipal.FindByIdentity(g_context, IdentityType.SamAccountName, this.USERNAME);
this.g_entry = (DirectoryEntry)g_principal.GetUnderlyingObject();
this.AUTHENTICATED = g_context.ValidateCredentials(this.USERNAME, this.USERPASS);
這就是設置。然後,我們後來用g_context ..
List<String> memberships=GetGroups(this.g_principal, true); // get a list of all possible groups for user
的遞歸組掃描功能的調用..
private List<String> GetGroups(Principal source, bool debug, int depth=0, List<String> resultset=null) {
if (resultset==null) resultset = new List<String>();
depth++;
foreach (GroupPrincipal group in source.GetGroups()) {
if (!resultset.Contains(group.Name)) {
resultset.Add(group.Name);
if (debug) {
log.Debug((String.Join("\t",new String[depth-1]))+"Located group("+group.Name+") at depth: "+depth);
}
resultset=GetGroups(group, debug, depth, resultset);
}
}
return resultset;
}
當以管理員身份運行,AD與用戶名的所有可能的組成員響應。當不是作爲高級程序運行時,AD用較少的組(僅基本組)響應。
任何有關我需要挖掘解決方案的建議?在虛擬Windows機器上是否存在一些隱藏的本地策略,這會在非管理員的ldap連接上隱藏活動目錄數據?