Подтвердить что ты не робот

Рекурсивно запрашивать роли LDAP из нескольких подразделений для пользователя

Я запускаю веб-приложение на сервере WildFly 9.0.2 с областью пользовательского входа (которому требуется рекурсивно запрашивать несколько организационных единиц A для организационных единиц B, которые запрашиваются у организационных единиц C для пользователя), которые настроены в standalone.xml, например:

<security-realm name="LoginRealm">
   <authentication>
       <ldap connection="EC2" base-dn="ou=users,dc=test,dc=de">
           <username-filter attribute="uid"/>
       </ldap>
   </authentication>
</security-realm>
...
<security-domain name="other" cache-type="default">
    <authentication>
        <login-module code="de.test.LoginModule" flag="required">
            <module-option name="principalDNPrefix" value="uid="/>
            <module-option name="principalDNSuffix" value=",ou=users,dc=test,dc=de"/>
            <module-option name="rolesCtxDN" value="ou=groups,dc=test,dc=de"/>
            <module-option name="roleAttributeID" value="cn"/>
            <module-option name="roleAttributeIsDN" value="false"/>
            ...

Пользователь регистрируется на веб-сайте, указав свое имя пользователя (например, testA), пароль (например, любой) и выбрав UserGroup из выпадающего меню (например, UserGroupA). Затем пользовательский модуль входа (de.test.LoginModule.class), который расширяет LdapLoginModule, выполняет поиск ролей, создавая основную строку, беря префикс из автономного xml и добавляя суффикс после этого например префикс: uid=
Построить по LoginModule: testA,ou=UserGroupA
Суффикс: ,ou=users,dc=test,dc=de
Результат: uid=testA,ou=UserGroupA,ou=users,dc=test,dc=de который сейчас работает отлично. Роли из ou=groups,dc=test,dc=de извлекаются и выполняются ограничения безопасности, определенные в файле web.xml с соответствующими ролями.

<security-constraint>
    <display-name>Test-Service</display-name>
    <web-resource-collection>
        <web-resource-name>Test</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <description>Only Project Processors may see this</description>
        <role-name>Project Processor</role-name>
    </auth-constraint>      
</security-constraint>

Теперь организационная единица "ProjectControlCenter" была добавлена ​​к древовидной структуре LDAP, которая выглядит так:

dc=test,dc=de
|-- ou=applications
|    |-- ou=ProjectControlCenter
|    |    |-- ou=permissions
|    |    |    |-- cn=group.Project Processor.manage
|    |    |    |-- cn=group.Project Processor.read
|    |    |    |-- cn=group.Project Monitorer.read
|    |    |    |-- ...
|    |    |-- ou=resources
|    |    |    |-- cn=ProjectControlCenter.Applicaton
|    |    |    |-- cn=ProjectControlCenter.List
|    |    |    |-- cn=ProjectControlCenter.System
|    |    |    |-- ...
|-- ou=groups
|    |    |-- cn=Project Processor
|    |    |-- cn=Project Monitorer
|    |    |-- ...
|    |-- ou=users
|    |    |-- ou=UserGroupA
|    |    |    |-- uid=testA
|    |    |    |-- uid=testB
|    |    |    |-- uid=testC
|    |    |-- ou=UserGroupB
|    |    |-- ...

Теперь мне нужно запросить не только роли как ou=groups,dc=test,dc=de, но и все ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de, где назначенные роли являются уникальным членом и добавляют это пользователю. Кроме того, потребуется еще один запрос, чтобы получить все ou=resources,ou=ProjectControlCenter,ou=applications,dc=test,dc=de, где ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de является уникальным членом, добавив его также пользователю.

Итак, возникает вопрос: есть ли способ рекурсивно запросить все группы для определенного пользователя, разрешения для этих групп и ресурсов для этих разрешений через конфигурации LDAP или мне нужно перегрузить метод createLdapInitContext(String username, Object credential) LdapLoginModule. класс для выполнения необходимых запросов?

4b9b3361

Ответ 1

Его возможно, но в определенной степени. Ваш случай использования кажется довольно сложным, и я лично избегаю такого дизайна. Не уверен, что вы уже проверили, но ваши вопросы, похоже, связаны с одним здесь.