OpenLDAP中动态组的问题

时间:2014-03-26 09:47:16

标签: spring-security ldap openldap spring-security-ldap

我正在尝试将当前的网络应用程序转移到retreive角色和身份验证以及openLDAP系统。我对动态组( groupOfURLs )和openLDAP存在一些问题。我正在使用OpenLDAP 2.4.33和spring 3.2。

我已经成功运行了身份验证,但是现在我在使用动态组覆盖设置系统以使用动态组角色时遇到了问题。

在Spring方面,我试图使用带有groupSearchFilter =“(member = {0})”的DefaultLdapAuthoritiesPopulator。我遇到的问题是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成员),我得到以下结果

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

显然,这说明查询返回静态和动态组的结果。这表示它已正确配置并且具有属性成员。

我遇到的问题是当我在成员attributrs上添加过滤器时。

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

在这种情况下,返回的所有内容都是静态组。似乎过滤器似乎无法访问成员属性。

还有其他人遇到过这个问题吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

很明显,这不是有活力的群体无法发挥作用的。最后我决定使用静态组。

可以在以下网址找到一个好的答案:stackoverflow.com/questions/4603570/openldap-dynlist-posixgroup