Роли Tomcat LDAP: роли не найдено - PullRequest
0 голосов
/ 10 октября 2018

Ошибка при аутентификации учетной записи пользователя домена (user01) с использованием JNDI для LDAP.Хотя технически это не ошибка, он читает

 Username user01 does NOT have role Domain Users

Я думал, и, насколько я понимаю, группу AD (где существует пользователь, входящий в приложение) можно сопоставить с именем роли в коде web.xml дляразрешить пользователю войти в приложение.

Моя текущая конфигурация JNDI Realm выглядит следующим образом:

.. / tomcat7 / conf / server.xml

<Realm className="org.apache.catalina.realm.JNDIRealm"
debug="99"
connectionURL="ldap://example.com:389"
authentication="simple"
referrals="follow"
connectionName="cn=administrator,cn=users,dc=example,dc=com"
connectionPassword="xxxxxxxxxx"
userSearch="(sAMAccountName={0})"
userBase="dc=example,dc=com"
userSubtree="true"
userRoleName="memberOf"
roleSearch="(member={0})"
roleName="cn"
roleSubtree="true"
roleBase="dc=example,dc=com" />

.. / tomcat7 / webapps / appdir / WEB-INF / web.xml (здесь я попытался указать группу пользователей домена AD в ограничении «имя-роли»):

<security-constraint>
    <display-name>Domain User Access</display-name>
    <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
   </web-resource-collection>
    <auth-constraint>
        <role-name>Domain Users</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <description>Webapp Admins</description>
    <role-name>Domain Admins</role-name>
</security-role>

<security-role>
    <description>Webapp Users</description>
    <role-name>Domain Users</role-name>
</security-role>

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>Entire Application</realm-name>
</login-config>
</web-app>

.. / tomcat7 / logs / catalina.out (последние 10 строк отражают причину - я думаю - проблемы, но я не знаю, как это исправить)

Oct 10, 2018 4:53:55 PM org.apache.catalina.authenticator.AuthenticatorBase 
register
FINE: Authenticated 'leeb' with type 'BASIC'
Oct 10, 2018 4:53:55 PM org.apache.catalina.authenticator.AuthenticatorBase 
invoke
FINE:  Calling accessControl()
Oct 10, 2018 4:53:55 PM org.apache.catalina.realm.RealmBase 
hasResourcePermission
FINE:   Checking roles GenericPrincipal[user01(CN=Domain 
Admins,CN=Users,DC=example,DC=com,Domain Admins,)]
Oct 10, 2018 4:53:55 PM org.apache.catalina.realm.RealmBase hasRole
FINE: Username user01 does NOT have role Domain Users
Oct 10, 2018 4:53:55 PM org.apache.catalina.realm.RealmBase 
hasResourcePermission
FINE: No role found:  Domain Users
Oct 10, 2018 4:53:55 PM org.apache.catalina.authenticator.AuthenticatorBase 
invoke
FINE:  Failed accessControl() test

Может кто-нибудь дать совет или заметить явную ошибку?Мне нужна другая пара глаз, чтобы увидеть, где не хватает этой конфигурации.

1 Ответ

0 голосов
/ 12 октября 2018

Пользователи домена - это встроенная функция, которая сообщает обо всех пользователях в домене как принадлежащих к этой группе ... за исключением случаев, когда запрос выполняется через LDAP.Если вы посмотрите на объект с помощью браузера LDAP, у него нет атрибута «member».Аналогичным образом, запрос LDAP для «(& (memberOf = CN = пользователи домена, CN = пользователи, DC = домен, DC = ccTLD))» не возвращает пользователей.

В моем домене я создал группу «Все пользователи», которая добавляется как часть процесса создания нового пользователя - неплохо, когда создание пользователя алгоритмически, но, безусловно, не идеально для ручной подготовки.Мы используем эту реальную группу для приложений LDAP, которые хотят, чтобы все пользователи имели некоторый базовый уровень доступа.

Там, где в традиционной группе все учетные записи, заполненные как члены, невозможно, вы можете использовать ADAM для доступа к AD и создать прокси-объект, который, например, охватывает пользователей, где (& (primaryGroupID = 513)) {пользователи, основной группой которых являются пользователи домена} или (& (objectCategory = person)).Я не уверен, что вы можете сделать то же самое в AD LDS (который заменил ADAM), поскольку я начал использовать настоящую группу AD несколько лет назад.

...