2008-11-19 62 views
1

我正在尝试使用我在ADAM中创建的用户对ADAM进行身份验证。但是,无论使用哪个密码(正确或不正确),我的搜索都会返回一个有效的DirectoryEntry对象。我会假设如果密码无效,那么搜索将返回一个空对象。我的假设是错误的还是在下面的代码中存在缺陷?ADAM认证 - howto?

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

您需要访问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.当您尝试访问无效的目录条目属性时,我不确定究竟会抛出哪个异常。一些实验可能是为了弄清楚哪个例外。您不希望捕获所有异常,因为还有其他问题(例如,目录服务器不可用),您可能希望以不同的方式处理失败的身份验证。

+0

太好了,谢谢。这非常有帮助。 现在我遇到了一个问题,无论是否输入正确的密码,我都会收到无效的用户/密码。有什么想法吗? – user26218 2008-11-19 17:37:04