Context
我们在将成员从LDAP服务器导入我们的应用程序时添加了组成员资格过滤 .
(之前我们从给定的ldap“基本DN”导入了所有成员;现在管理员可以限制到某些组,即基本DN中的成员“Sales”和“HR”) .
我们的应用支持:
-
SunONE
-
Active Directory
此外,我们计划仅支持静态组,而不支持动态组 .
How We Would Have Done It
在过去,我们将使用两次查找将成员复制到我们的数据库中以获得此新功能 .
-
查找baseDN中的所有成员
-
查找组名称在列表中的所有组(包含成员)(例如"Sales"或"HR") . 以编程方式通过Map "which users belong to which groups"进行跟踪,即使用"group member"属性(SunONE中的"uniqueMember",ActiveDirectory中的"member")
-
将#1和#2的结果相交以获得'members to import'
Can MemberOf/IsMemberOf Reduce queries and logic?
在简短的互联网研究中,我发现SunONE和ActiveDirectory有一个属性(isMemberOf / memberOf),用于标识“此用户所属的组”
理论上,我们可以将上述逻辑简化为一个LDAP查询:
- 查找baseDN中任何组成员的所有成员
Can MemberOf/IsMemberOf Reduce queries and logic?
知道问题: - memberOf / isMemberOf仅支持静态组 - 它不支持嵌套组
Question
-
这种使用memberOf / IsMemberOf的方法有效吗?
-
有任何警告吗?
-
OpenLDAP或其他服务器怎么样?他们都支持这样的属性吗? (我看到OpenLDAP有memberOf "overlay",但是管理员必须明确启用它)
Reference
SunOne:http://docs.oracle.com/cd/E19575-01/820-2763/bcajq/index.html
活动目录:http://msdn.microsoft.com/en-us/library/ms677943.aspx
相关SO问题:How to write LDAP query to test if user is member of a group?
2 回答
它的工作原理需要注意 .
如果它以OpenLDAP实现的方式工作,则memberOf属性仅适用于启用后创建的条目 . 它没有'赶上' .
您可以询问任何LDAP服务器的根DN,以确定它是否支持该功能 . 您对OpenLDAP对此的支持是正确的 .
我无法与Sun ONE对话,但Active Directory确实支持用户的memberOf属性,您可以对其进行查询 . 该属性是一个多值属性,包含用户所属组的distinguishedName .
也就是说,您必须通过它的dn查询该组,并且您不能使用通配符匹配作为其一部分 . 这本身不支持嵌套组,但如果您愿意,我只需将objectCategory添加到查询属性中,并检查“如果此成员是另一个组,则重复查找” .
如果你的团队结构中有一个循环,这一切都会变得很糟糕,但我很确定很多其他事情也是如此,而且AD阻止你这样做 .