ADAM身份验证 - howto?

时间:2008-11-19 00:57:23

标签: c# authentication active-directory adam

我正在尝试使用我在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();

}

1 个答案:

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