LDAP:memberOf / IsMemberOf属性是否可靠用于确定组成员身份:SunONE / ActiveDirectory / OpenLDAP

时间:2012-03-15 15:27:47

标签: active-directory ldap openldap sunone active-directory-group

上下文

我们在将成员从LDAP服务器导入我们的应用程序时添加了组成员资格过滤功能。

(之前我们从给定的ldap“基本DN”导入了所有成员;现在管理员可以限制到某些组,即基本DN中的成员“Sales”和“HR”。

我们的应用程序支持:

  • SUNONE

  • Active Directory

此外,我们计划仅支持静态组,而不支持动态组。

我们将如何完成

过去,我们会使用两次查找将成员复制到我们的数据库中以获得此新功能。

  1. 查找baseDN中的所有成员
  2. 查找组名称在列表中的所有组(带成员)(例如“Sales”或“HR”)。以编程方式通过Map“跟踪哪些用户属于哪些组”,即使用“group member”属性(SunONE中的“uniqueMember”,ActiveDirectory中的“member”)
  3. 将#1和#2的结果相交以获取'要导入的成员'
  4. 可以使用MemberOf / IsMemberOf减少查询和逻辑吗?

    在简短的互联网研究中,我发现SunONE和ActiveDirectory有一个属性(isMemberOf / memberOf),用于标识“此用户所属的组”

    理论上,我们可以将上述逻辑简化为一个LDAP查询:

    1. 查找baseDN中属于任何组
    2. 成员的所有成员

      可以使用MemberOf / IsMemberOf减少查询和逻辑吗?

      了解问题:   - memberOf / isMemberOf仅支持静态组   - 它不支持嵌套组

      问题

      • 使用memberOf / IsMemberOf的方法是否可行?
      • 有任何警告吗?
      • OpenLDAP或其他服务器怎么样?他们都支持这样的属性吗? (我看到OpenLDAP有memberOf“overlay”,但管理员必须明确启用它)

      参考

      的SunOne: http://docs.oracle.com/cd/E19575-01/820-2763/bcajq/index.html

      Active Directory: http://msdn.microsoft.com/en-us/library/ms677943.aspx

      相关SO问题: How to write LDAP query to test if user is member of a group?

      memberOf vs. groupMembership in LDAP (Liferay)

2 个答案:

答案 0 :(得分:2)

Will this approach using memberOf/IsMemberOf work?

这将起到警告的作用。

Any caveats?

如果它以OpenLDAP实现的方式工作,则memberOf属性仅适用于启用后创建的条目。它没有“赶上”。

What about OpenLDAP or other servers? do they all support such an attribute. (I see that OpenLDAP has memberOf "overlay", but an
     

管理员必须明确启用它)

您可以询问任何LDAP服务器的根DN,以确定它是否支持该功能。您对OpenLDAP对此的支持是正确的。

答案 1 :(得分:0)

我无法与Sun ONE对话,但Active Directory确实支持用户的memberOf属性,您可以对其进行查询。该属性是一个多值属性,包含用户所属组的distinguishedName。

也就是说,您必须通过它的dn查询该组,并且您不能使用通配符匹配作为其一部分。这本身不支持嵌套组,但如果您愿意,我只需将objectCategory添加到查询属性中,并检查“如果此成员是另一个组,则重复查找”。

如果你的团队结构中有一个循环,这一切都会变得很糟糕,但我很确定很多其他事情也是如此,而且AD阻止你这样做。