LDAP端口636尽管LDAP有,但DirectoryEntry属性不包含groupmembership

时间:2012-10-12 16:31:21

标签: c# ldap port directoryentry

在C#中,我使用以下代码绑定到安全的LDAP站点

authServer =
    new DirectoryEntry("LDAP://whatever.com:636",
          authServerUsernameFromConfig,
          authServerPasswordFromConfig,
          AuthenticationTypes.Anonymous );

然后搜索找到的用户。

然后检查以下集合,查找“groupMembership”的属性名称

DirectorySearcher directorySearch = new DirectorySearcher(authServer, filterKey);
...
SearchResult result = directorySearch.FindOne();
...
authUser = new DirectoryEntry(result.Path, userDN, password, AuthenticationTypes.None);
...
(read) authUser.Properties.PropertyNames

但是,使用636安全端口时未找到任何一个。找到其他属性。当绑定到非安全PORT时,所有属性都可以找到具有636绑定的属性以及那些名为groupMembership的属性。

任何人都可以解释为什么会这样或如何检索它们。

似乎使用LDP.exe实用程序可以看到这些groupMembership属性与安全端口636绑定。

1 个答案:

答案 0 :(得分:4)

  • 目录信息树没有属性。目录信息库具有属性,分组为条目。属性可能是多值的,属性总是单值的。
  • LDAP客户端不“绑定”到连接。 LDAP客户端建立与安全端口(使用SSL)或非安全端口的连接(如果客户需要并且服务器允许,则可以将其“提升”为安全连接)。建立连接后,该连接没有授权状态。然后,LDAP客户端可以使用BIND操作来请求服务器验证凭据并更改连接的授权状态。服务器使用连接的授权状态来确定使用该连接的客户端是否具有对包含这些条目的条目和属性的访问权限。
  • 如果连接不是安全连接,现代的,专业品质的LDAP服务器可以拒绝访问某些敏感属性。如果LDAP客户端访问的服务器具有此功能,则通过安全连接和非安全连接访问数据没有区别。这些传统服务器不区分安全连接和非安全连接以确定访问权限和权限 - 连接的授权状态用于确定访问权限。

使用ldapsearch等已知良好工具验证LDAP客户端是否可以根据需要访问数据。如果已知良好的LDAP客户端可以访问数据而手动编码的LDAP客户端不能访问,则检查搜索请求的以下参数:

  • 基础对象或基本DN。这是搜索开始的地方。不返回优于基础对象的条目
  • 搜索范围。 BASE仅返回条目和请求属性,ONE返回直接从属于基础对象的条目,SUB返回基础对象,所有条目都从属于基础对象,在任何水平。
  • 过滤器。过滤器用于缩小搜索范围,由attributeType-attributeValue断言组成,可以有多种不同的形式
  • 服务器要从与其他搜索参数匹配的条目返回的请求属性。如果没有请求,某些API(不是全部)将返回所有用户属性。

另见