身份验证使用C#
可以使用类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
}
我会建议使用objectCategory =人,而不是对象类。 ObjectCategory是单值和索引,而objectClass不是 - >使用objectCategory使你的AD查询更快 – 2010-01-12 10:13:49
@marc_s:只能在* objectCategory *和* objectClass *或* objectClass *中使用* objectCategory *该筛选器在.NET中不起作用。 – 2010-07-13 16:35:21
你不应该使用这种方法,因为它也试图*阅读*在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
你应该总是将语言添加到标签列表;) – Scoregraphic 2010-01-12 09:06:25