OpenLDAP 中的动态组问题
Posted
技术标签:
【中文标题】OpenLDAP 中的动态组问题【英文标题】:Issue with Dynamic Groups in OpenLDAP 【发布时间】:2014-05-04 14:55:42 【问题描述】:我正在尝试移动我们当前的网络应用程序来检索角色和身份验证以及 openLDAP 系统。我在使用动态组 (groupOfURLs) 和 openLDAP 时遇到了一些问题。我正在使用 OpenLDAP 2.4.33 和 spring 3.2 。
我的身份验证工作成功,但是现在我在设置系统以使用动态组覆盖使用动态组的角色时遇到问题。
在春季方面,我尝试使用 DefaultLdapAuthoritiesPopulator 和 groupSearchFilter = “(member=0)”。我遇到的问题是spring在我的动态组中找不到任何成员,但是它可以找到静态组的成员(groupofnames)(。
这似乎不是春季问题,因为我在使用 ldapsearch 命令时遇到了同样的问题。我遇到的问题最好通过例子来说明。
我正在使用以下 LDIF
dn: ou=Groups,dc=myapp,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Groups
dn: ou=Users,dc=myapp,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Users
dn: uid=userA,ou=Users,dc=myapp,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: userA
cn: test-forename
sn: test-surname
mail: userA@mail.com
userPassword:: e1NTSEF9bVpJVGxZRlFYdnhBemhLQkdxWll0VnlRQjRUdjBaelhEZkpaZnc9PQ==
dn: uid=userB,ou=Users,dc=myapp,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: userB
cn: test-forename
sn: test-surname
mail: userB@mail.com
userPassword:: e1NTSEF9bVpJVGxZRlFYdnhBemhLQkdxWll0VnlRQjRUdjBaelhEZkpaZnc9PQ==
dn: cn=DynamicGroup,ou=Groups,dc=myapp,dc=com
cn: DynamicGroup
objectClass: top
objectClass: groupOfURLs
ou: Groups
memberURL: ldap:///ou=Users,dc=myapp,dc=com??sub?mail=userA@mail.com
dn: cn=StaticGroup,ou=Groups,dc=myapp,dc=com
cn: StaticGroup
objectClass: top
objectClass: groupofnames
ou: Groups
member: uid=userA,ou=Users,dc=myapp,dc=com
这会创建两个用户和两个组,一个是静态的,一个是动态的。
如果我做一个简单的搜索,我会得到
ldapsearch.exe -v -x -h localhost -p 389 -D "cn=admin,dc=myapp,dc=com" -w secret -LL -b "ou=Groups,dc=myapp,dc=com" "(objectClass=*)" dn member
在此我使用 ("(objectClass=*)" dn member) 进行搜索,我得到以下结果
ldap_initialize( ldap://localhost:389 )
filter: (objectClass=*)
requesting: dn member
version: 1
dn: ou=Groups,dc=myapp,dc=com
dn: cn=DynamicGroup,ou=Groups,dc=myapp,dc=com
member: uid=dbunit,ou=Users,dc=myapp,dc=com
member: uid=userA,ou=Users,dc=myapp,dc=com
member: uid=userB,ou=Users,dc=myapp,dc=com
dn: cn=StaticGroup,ou=Groups,dc=myapp,dc=com
member: uid=dbunit,ou=Users,dc=myapp,dc=com
很明显,这说明查询返回静态组和动态组的结果。这表明它已正确配置并且具有属性成员。
我遇到的问题是当我在成员属性上添加过滤器时。
ldapsearch.exe -v -x -h localhost -p 389 -D "cn=admin,dc=myapp,dc=com" -w secret -LL -b "ou=Groups,dc=myapp,dc=com" "(member=*)" dn member
在这种情况下,我将应用过滤器“(member=*)”。
ldap_initialize( ldap://localhost:389 )
filter: (member=*)
requesting: dn member
version: 1
dn: cn=StaticGroup,ou=Groups,dc=myapp,dc=com
member: uid=dbunit,ou=Users,dc=myapp,dc=com
在这种情况下,返回的只是静态组。过滤器似乎无权访问成员属性。
还有其他人遇到过这个问题吗?
任何帮助将不胜感激。
【问题讨论】:
我不相信您可以将另一个过滤器应用于动态组,它本身就是一个过滤器。最近关于这个主题的另一个问题似乎证实了这一点。 是的,我在发布 (***.com/questions/4603570/openldap-dynlist-posixgroup) 后才看到。我希望有人可能有一个很好的解决方法。在他们提到使用自动组覆盖的帖子中,所以我开始研究它。 【参考方案1】:很明显这不是动态组不起作用的方式。最后我决定使用静态组。
可以在以下位置找到一个很好的答案:***.com/questions/4603570/openldap-dynlist-posixgroup
【讨论】:
以上是关于OpenLDAP 中的动态组问题的主要内容,如果未能解决你的问题,请参考以下文章