身份验证使用C#

问题描述:

我只是有一个用户名,并没有任何密码。我只是想检查这个用户名是否存在于Active Directory。我该如何解决它?身份验证使用C#

+0

你应该总是将语言添加到标签列表;) – Scoregraphic 2010-01-12 09:06:25

可以使用类DirectoryEntry此类任务。看到这里的Exists - 方法:http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.exists.aspx

试试这个:

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

如果你在.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