为什么 objectClass 在 LDAP 服务器之间不同

Why objectClass is different between LDAP servers

我正在尝试编写一个应用程序,将来自多个 LDAP 服务器的用户同步到一个数据库中。我试图编写一个代码,从给定的 basedn 中查找服务器中的所有组。但后来我注意到 objectClass 值在 LDAP 服务器之间是不同的。

例如,OpenLDAP 使用 objectClass=posixgroup 来标识一个组,而 AD 使用 objectClass=group。试图找到为什么没有这方面的标准,但找不到。

除了为每个服务器类型配置它之外,是否有办法识别该服务器用于组的 objectClass 名称的值?

对此没有唯一的答案。对于 OpenLDAP 和许多其他情况,这取决于您使用的模式。我在 OpenLDAP 中对组使用 groupOfUniqueNames,对角色使用 organizationalRole,还有其他选择。

OpenLDAP 使用objectClass=posixgroup 来识别组。事实上,是连接到目录服务器的服务使用或不使用特定的模式。目录服务器本身是无意识的(或者至少从 LDAP 的角度来看——Active Directory 比 LDAP 做的更多)。

在 POSIX 系统上,例如Linux 很明显 posixgroup 被许多服务使用,同样 group class 是 Windows 特定的。许多服务允许自定义在目录中搜索信息的方式,即您可以根据您的模式调整它们的配置。

因此,虽然您可以使用技巧来处理这两种情况,但如果您想真正确定使用了哪种模式,您有两个选择:

  1. 识别正在使用该目录的服务并查找它们
  2. 向服务器查询它支持的模式。通常这些也是在使用的(至少 'somebody')。例如,在我的 OpenLDAP 服务器上,我只包含按需提供的模式。因此,在此服务器上,您会找到 posixgroup 架构。但是我怀疑您是否会在典型的 Active Directory 服务器上找到它(但您会发现 group)。 Schemata 具有世界唯一的对象 ID,因此您可以测试特定 ID 的存在以确保 group 确实是您知道的 group