Существует ли реализация Spring Security DefaultLdapAuthoritiesPopulator, которая поддерживает вложенные группы? - PullRequest
6 голосов
/ 02 марта 2011

Я пытаюсь получить сервер Pentaho-BI, который использует Spring Security для поддержки вложенных ролей LDAP. Моя структура группы выглядит следующим образом:

  • PentahoAdmins (группа)
    • Участники: администраторы домена
  • Администраторы домена (группа)
    • Участники: User1
  • Пользователь1 (пользователь)

Я хотел бы убедиться, что User1 является частью группы PentahoAdmins, без необходимости непосредственного добавления пользователя в группу. Судя по моим исследованиям в Интернете, не похоже, что Spring DefaultLdapAuthoritiesPopulator поддерживает вложенные группы. Я уверен, что возможно создать подкласс, который поддерживает групповое вложение, но кто-то уже пошел на эту проблему и опубликовал его в проекте с открытым исходным кодом?

Ответы [ 2 ]

7 голосов
/ 10 сентября 2012

Настройте заполнитель полномочий LDAP, как показано ниже, и он будет работать с вложенными группами:

<bean id="ldapAuthoritiesPopulator" class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
    <constructor-arg ref="ldapContextSource" />
    <constructor-arg value="OU=Resource,OU=Security Groups,OU=Administrative Area" /> <!-- group search base -->
    <property name="groupRoleAttribute" value="cn" /> <!-- cn is default, but setting it anyway so it's clear -->
    <property name="rolePrefix" value="" /> <!-- reset prefix, default is ROLE_ -->
    <property name="convertToUpperCase" value="false"/>
    <property name="searchSubtree" value="true" /> <!-- deep search -->
    <property name="groupSearchFilter" value="(&amp;(&amp;(objectClass=group)(objectCategory=CN=Group,CN=Schema,CN=Configuration,DC=company,DC=local))(&amp;(cn=RG-TRADE*)(member:1.2.840.113556.1.4.1941:={0})))" />
</bean>

Значение groupSearchFilter означает:

objectClass=[group object class] AND objectCategory=[group object category] AND cn_name_of_group=RG-TRADE* AND member:here_magic_for_nested_groups=[user full dn]
2 голосов
/ 05 декабря 2011

Я нашел эту статью в отношении Microsoft Active Directory. Поиск по LDAP_MATCHING_RULE_IN_CHAIN ​​или по ссылке выше предоставит дополнительную информацию по теме. Идея состоит в том, что вы можете добавить фильтр поиска группы для родительской группы и uid пользователя в вашей конфигурации Spring Security:

(&(uid={0})(memberof:1.2.840.113556.1.4.1941:=CN=parentGroup,DC=mycompany,DC=com))

=~ This user is {0} and is in a group that is a member of our parent group.

Я протестировал это с Spring LDAP, используя контекст только для чтения для поиска в MS Active Directory, но я еще не подтвердил это с помощью фильтра группового поиска в Spring Security. Надеюсь, это поможет.

...