0
我使用下面的代码来验证属于我们公司域的用户。这工作正常。如何验证Windows用户?
using (var entry = new DirectoryEntry(""))
{
DirectorySearcher ds = new DirectorySearcher(entry);
ds.Filter = "(|(&(objectCategory=user)(name=domainuser)))";
ds.PropertyNamesOnly = true;
ds.PropertiesToLoad.Add("name");
ds.ReferralChasing = ReferralChasingOption.None;
SearchResultCollection src = ds.FindAll();
bool isValid = false;
try
{
foreach (SearchResult sr in src)
{
DirectoryEntry de = sr.GetDirectoryEntry();
de.Password = "domainpassword";
object nativeObject = de.NativeObject;
if (nativeObject != null)
isValid = true;
break;
}
}
catch (DirectoryServicesCOMException ex) {}
return isValid;
}
实际的问题是,我需要在我的笔记本电脑(MYINSTANCE)来创建一个LDAP实例,然后我需要以编程方式创建用户。我能够创建用户并遍历它们。
现在对于这样的用户,我无法验证用户名和密码。
我做的改变如下。
using (var entry = new DirectoryEntry("LDAP://MYPC:389/CN=MYINSTANCE,DC=COMPANYDOMAIN,DC=com", "domainuser", "domainpassword", AuthenticationTypes.Secure))
{
DirectorySearcher ds = new DirectorySearcher(entry);
ds.Filter = "(|(&(objectCategory=user)(name=instanceuser)))";
ds.PropertyNamesOnly = true;
ds.PropertiesToLoad.Add("name");
ds.ReferralChasing = ReferralChasingOption.None;
SearchResultCollection src = ds.FindAll();
bool isValid = false;
try
{
foreach (SearchResult sr in src)
{
DirectoryEntry de = sr.GetDirectoryEntry();
de.Password = "instancepassword";
object nativeObject = de.NativeObject;
if (nativeObject != null)
isValid = true;
break;
}
}
catch (DirectoryServicesCOMException ex) {}
return isValid;
}
当我使用此代码,我碰到下面的错误。 “服务器无法联系。”当我使用(PrincipalContext pc =新的PrincipalContext(ContextType.Domain,“COMPANYDOMAIN”,“CN = MYINSTANCE,DC = COMPANYDOMAIN,DC = com”,ContextOptions.SimpleBind,“domainuser”,“domainpassword”)现在我不 – 2012-02-06 12:41:00
@BerylWilson:你说你在你的笔记本电脑上创建了一个LDAP实例?这是否意味着你正在使用AD LDS(活动目录 - 轻量级目录服务)?我相信这是一个错误,但它总是返回false。 AD LDS不能用于身份验证.... – 2012-02-06 14:13:16
感谢您的快速响应,您是对的,我遵循此链接http://bartdesmet.net/blogs/bart/archive/2010/07/12/getting-如果AD LDS不能用于身份验证,是否可以引用一些官方指针(MSDN)?我也可以参考一些官方指针(MSDN)吗?使用相同的搜索引擎 – 2012-02-06 14:25:48