2010-01-12 152 views

回答

1

試試這個:

string strDomain = DOMAINNAME; 
string strUserId = USERNAME; 

string strPath = "LDAP://DC=" + strDomain.Trim() + ",DC=com"; 

DirectoryEntry de = new DirectoryEntry(strPath); 
DirectorySearcher deSearch = new DirectorySearcher(de); 

deSearch.Filter = "(&(objectClass=user)(SAMAccountName=" + strUserId.Trim() + "))"; 

SearchResult results = deSearch.FindOne(); 
if ((results == null)) 
{ 
    //No User Found 
} 
else 
{ 
    //User Found 
} 
+1

我會建議使用objectCategory =人,而不是對象類。 ObjectCategory是單值和索引,而objectClass不是 - >使用objectCategory使你的AD查詢更快 – 2010-01-12 10:13:49

+0

@marc_s:只能在* objectCategory *和* objectClass *或* objectClass *中使用* objectCategory *該篩選器在.NET中不起作用。 – 2010-07-13 16:35:21

+0

你不應該使用這種方法,因爲它也試圖*閱讀*在Active Directory中值,而不是檢查認證。您可以擁有有效的憑據,但代碼會失敗,因爲您無權查找用戶。 – 2011-08-18 16:59:54

2

如果你在.NET 3.5中,你可以使用System.DirectoryServices.AccountManagement功能。您的代碼看起來是這樣的:

// create a "principal context" - e.g. your domain (could be machine, too) 
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 

UserPrincipal user = UserPrincipal.FindByIdentity(pc, "username"); 

bool userExists = (user != null); 

這應該做的伎倆;-)

有關S.DS.AM更多詳細信息,請參閱本優秀的MSDN文章:

Managing Directory Security Principals in the .NET Framework 3.5