You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中使用LdapConnection对象搜索LDAP中的用户?

使用LdapConnection搜索LDAP用户

没问题,既然你已经有了绑定好的LdapConnection实例,我们可以用System.DirectoryServices.Protocols命名空间下的SearchRequest和SearchResponse来实现用户搜索——这是更底层、更灵活的LDAP操作方式,完全适配你的需求。

完整实现代码

首先确保你引用了System.DirectoryServices.Protocols程序集,然后可以用下面的代码完成搜索:

using System.DirectoryServices.Protocols;

// 假设你已经有了绑定好的ldapConnectionObject实例
string targetUserName = "要搜索的用户名";
string searchBaseDn = "你的LDAP基础DN,比如DC=example,DC=com"; // 根据你的实际环境调整

// 构造LDAP搜索请求
// 参数说明:搜索基础DN、搜索范围、过滤条件、要返回的属性(null表示返回所有属性)
SearchRequest searchRequest = new SearchRequest(
    searchBaseDn,
    $"(&(objectClass=user)(cn={targetUserName}))", // 注意这里直接用&,不需要HTML转义的&
    SearchScope.Subtree,
    null // 可以指定具体属性,比如new string[] {"cn", "mail", "samaccountname"}来减少返回数据量
);

// 发送搜索请求并获取响应
SearchResponse searchResponse = (SearchResponse)ldapConnectionObject.SendRequest(searchRequest);

// 遍历并处理搜索结果
foreach(SearchResultEntry userEntry in searchResponse.Entries)
{
    // 输出用户的唯一标识DN
    Console.WriteLine($"找到匹配用户: {userEntry.DistinguishedName}");
    
    // 获取具体属性示例:比如邮箱
    if(userEntry.Attributes.Contains("mail"))
    {
        string userEmail = userEntry.Attributes["mail"][0].ToString();
        Console.WriteLine($"用户邮箱: {userEmail}");
    }
    
    // 其他属性同理,比如samAccountName、displayName等都可以通过Attributes集合获取
}

关键细节说明

  • 过滤器修正:你原来代码里的&是HTML转义字符,实际代码中直接使用&即可,所以正确的过滤器格式是(&(objectClass=user)(cn={targetUserName}))。
  • 搜索范围:SearchScope.Subtree表示搜索基础DN下的所有层级;如果只需要搜索当前层级,改用SearchScope.OneLevel;仅搜索基础DN本身则用SearchScope.Base。
  • 性能优化:如果不需要返回用户的所有属性,建议在构造SearchRequest时指定具体的属性数组,这样能减少网络传输的数据量,提升搜索效率。
  • 分页支持:如果搜索结果数量较多,还可以添加PageResultRequestControl实现分页搜索,不过常规场景下上面的基础实现就足够用了。

内容的提问来源于stack exchange,提问作者Psth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:50:36