在.Net中使用LDAP身份验证的管理问题

时间:2011-08-23 12:46:59

标签: .net ldap

用于验证LDAP服务器中用户的大多数代码示例如下所示:

Public Function Authenticate(ByVal userName As String, ByVal password As String) As Data.User

   Dim root As DirectoryEntry = New DirectoryEntry("LDAP://" + _server, userName, password)
   Dim search As DirectorySearcher = New DirectorySearcher(root)
   Dim user As User = Nothing

   search.SearchScope = SearchScope.Subtree
   search.Filter = "(sAMAccountName=" + userName + ")"

   Dim results As SearchResultCollection = search.FindAll()

   If (Not (results Is Nothing)) Then

       user = _GetUser(results(0).Path)

   End If

   Return user

End Function

我没有设置客户端的LDAP服务器。上述代码仅适用于管理员帐户。我注意到只有管理员才能在LDAP服务器上有效查询。这可能是安全问题的管理员的选择。这对我来说是合理的,但我不确定这是否是发生了什么的真正原因。

我用Google搜索了不同的解决方案,但其中大多数似乎与之前的代码相似。在我的情况下,我将尝试使用特殊的LDAP帐户在服务器上进行查询,并在登录后查找尝试进行身份验证的用户。

这是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为你不应该两次查询,一次用于验证,另一次用于查询。 这是C#中的代码:


string directoryEntryFinalDetails =“LDAP:/// DC = xyz,DC = com”;

DirectoryEntry directoryEntry = new DirectoryEntry(directoryEntryDetails);

directoryEntry.AuthenticationType = AuthenticationTypes.Secure;

** directoryEntry.Username = General.DecryptedUserName;

directoryEntry.Password = General.DecryptedPassword; **

DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);

DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry);

directorySearcher.Filter =“”;

foreach(DirectorySearcher.FindAll()中的SearchResult resultSet)

{

//your code

}


请告诉我这是否有帮助!!