在Jetty LdapLoginModule中指定LDAP组搜索属性

时间:2012-07-01 23:43:22

标签: java ldap jetty jaas

使用JAAS时,有没有办法指定角色(组)搜索查询返回的属性?

返回的组在uniqueMember属性中有大约10万个条目,这使得应用服务器和OpenLDAP之间的链接饱和。由于查询只需要cn属性,我想告诉容器只在执行搜索时请求。

目前,查询未设置任何要返回的属性,这将返回所有属性。

DEV(Jetty)java.security.auth.login.config看起来像这样

devldap {
   org.eclipse.jetty.plus.jaas.spi.LdapLoginModule required
   debug="true"
   contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
   hostname="ldap-dev.example.com"
   port="389"
   bindDn="cn=Manager,dc=example,dc=com"
   bindPassword="xxxx"
   authenticationMethod="simple"
   forceBindingLogin="true"
   userBaseDn="ou=users,dc=example,dc=com"
   userRdnAttribute="uid"
   userIdAttribute="uid"
   userPasswordAttribute="userPassword"
   userObjectClass="inetOrgPerson"
   roleBaseDn="ou=groups,dc=example,dc=com"
   roleNameAttribute="cn"
   roleMemberAttribute="uniqueMember"
   roleObjectClass="groupOfUniqueNames";
   };

1 个答案:

答案 0 :(得分:4)

那里有严重的错误。它根本不应该返回组条目属性,只返回CN。

这看起来像org.eclipse.jetty.plus.jaas.spi.LdapLoginModule中的主要错误。它应该在returningAttributes中将SearchControl的{​​{1}}属性设置为new String[]{_roleNameAttribute}。您需要自己报告和/或修补它。

如果您使用的是OpenLDAP,可以考虑使用getUserRolesByDn()叠加层。这为用户自己提供了列出他所属的所有组的属性。然而,它不是回顾性的,并且由于您已经清楚地拥有一个大型目录,因此您可以从现有组中填充它。叠加层将在安装后自动维护,但仅适用于安装后的组更新。