我正在尝试使用我在ADAM中创建的用户针对ADAM对用户进行身份验证。但是,无论使用何种密码(正确或不正确),我的搜索都会返回一个有效的DirectoryEntry对象。我假设如果密码无效,那么搜索将返回null对象。我的假设是错误的还是下面的代码中存在缺陷?
DirectoryEntry de = new DirectoryEntry("LDAP://localhost:389/cn=Groups,cn=XXX,cn=YYY,dc=ZZZ");
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=user) (cn=" + userId + "))";
SearchResultCollection results = deSearch.FindAll();
if (results.Count > 0)
{
DirectoryEntry d = new DirectoryEntry(results[0].Path, userId, password);
if (d != null)
DoSomething();
}
答案 0 :(得分:0)
您需要访问DirectoryEntry的属性以确定它是否有效。我通常检查Guid是否为空。
bool valid = false;
using (DirectoryEntry entry = new DirectoryEntry( results[0].Path, userId, password ))
{
try
{
if (entry.Guid != null)
{
valid = true;
}
}
catch (NullReferenceException) {}
}
注意:您还需要在using
语句中包装搜索根目录条目和搜索器,或者在完成后明确处置它们,以免您不使用资源。
P.S。当您尝试访问无效的目录条目属性时,我不确定抛出哪个异常。一些实验可能是为了找出要捕获的异常。您不希望捕获所有异常,因为您可能希望处理与身份验证失败不同的其他问题(例如,目录服务器不可用)。