0

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

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

然后搜索发现OK的用户。

然后检查以下集合以查找“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 绑定。

4

1 回答 1

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

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

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

也可以看看

于 2012-10-13T11:12:09.480 回答