C# 使用C对Active Directory进行身份验证#

C# 使用C对Active Directory进行身份验证#,c#,authentication,active-directory,directoryservices,C#,Authentication,Active Directory,Directoryservices,我只是有一个用户名,没有任何密码。我只想检查中是否存在此用户名。我该怎么做呢?您可以使用类DirectoryEntry执行此类任务。请参见此处的Exists-方法:尝试以下操作: string strDomain = DOMAINNAME; string strUserId = USERNAME; string strPath = "LDAP://DC=" + strDomain.Trim() + ",DC=com"; DirectoryEntry de = new DirectoryEnt

我只是有一个用户名,没有任何密码。我只想检查中是否存在此用户名。我该怎么做呢?

您可以使用类
DirectoryEntry
执行此类任务。请参见此处的
Exists
-方法:

尝试以下操作:

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
}

如果您使用的是.NET3.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文章:


您应该始终将语言添加到标记列表中;)我建议使用objectCategory=person而不是objectClass。ObjectCategory是单值和索引的,而objectClass不是-->使用ObjectCategory进行AD查询faster@marc_s:可以同时使用objectCategory和objectClass,也可以仅使用objectClass,因为仅在筛选器中使用objectCategory在.NET中不起作用。您不应使用此方法,因为它还尝试读取Active Directory中的值,而不是检查身份验证。您可以拥有有效的凭据,但代码将失败,因为您没有查找用户的权限。