.net - 如何使用带有用户名而不是 CN 的 LDAP 查询 ActiveDirectory?

标签 .net active-directory ldap

如果我将 .NET DirectoryEntry.Path 设置为类似:

LDAP://CN=John Smith,OU=Group Name,DC=example,DC=com

一切正常,我得到了我需要的 DirectoryEntry。但是,我不知道用户的真实通用名称 (CN)。我只知道他们的用户名,“John.Smith”。

那么,如何查询用户名呢?我已经尝试了以下所有 没有 成功:
LDAP://CN=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://sAMAccountName=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://userPrincipalName=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://userPrincipalName=John.Smith@example.com,OU=Group Name,DC=example,DC=com
LDAP://uid=John.Smith,OU=Group Name,DC=example,DC=com
LDAP://o=John.Smith,OU=Group Name,DC=example,DC=com

最佳答案

您不能仅通过创建 LDAP 字符串进行查询 - 您需要为此使用代码。

就像是:

DirectoryEntry deRoot = new DirectoryEntry("LDAP://yourserver/CN=Users,dc=YourCompany,dc=com");

DirectorySearcher dsFindUser = new DirectorySearcher(deRoot);
dsFindUser.SearchScope = SearchScope.SubTree;

dsFindUser.PropertiesToLoad.Add("sn"); // surname = last name
dsFindUser.PropertiesToLoad.Add("givenName"); // first name

dsFindUser.Filter = string.Format("(&(objectCategory=Person)(anr={0}))", yourUserName);

SearchResult rseult = dsFindUser.FindOne();

if(result != null)
{
   if(result.Properties["sn"] != null)
   {  
      string lastName = result.Properties["sn"][0].ToString();
   }

   if(result.Properties["givenName"] != null)
   {  
      string lastName = result.Properties["givenName"][0].ToString();
   }
}

System.DirectoryServices.DirectorySearcher 上的完整 MSDN 文档类可以在 MSDN 上找到 - 它有很多额外的属性和设置。

如果您使用的是 .NET 3.5,那么使用用于处理用户和组的强类型例程库,事情会变得更容易一些 - 请参阅此优秀 MSDN article有关更多信息的主题。

希望这可以帮助

马克

关于.net - 如何使用带有用户名而不是 CN 的 LDAP 查询 ActiveDirectory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295157/

相关文章:

java - 如何在没有管理员用户的情况下通过 JNDI 在 Active Directory 中更改过期密码

PHP LDAP 获取用户 SID

c++ - 如何从 C++ 使用 LDAP 连接到 Active Directory?

c# - 如何使用这个 "combined"数据类型 : (int, int)[]

.net - StopWatch.ElapsedTicks 和 StopWatch.Elapsed.Ticks 总是一样的吗?

c# - Windows 10 NotifyIcon 图标总是看起来像素化

c# - .NET/ASP.NET 与 Java 的高级功能比较

active-directory - Active Directory 组和 Exchange 中的组之间有什么关系(如果有)?

active-directory - 我在哪里可以获得企业目录结构?

LDAP 的 Spring Security Java 配置