GlassFish 3.1 LDAP-Realm через ActiveDirectory - PullRequest
0 голосов
/ 17 августа 2011

Здесь были некоторые вопросы по этой теме, но ни один из ответов не помог, или темы, кажется, умерли ... так что вот еще один:

Я пытаюсь выполнить аутентификацию своих веб-приложений через сервер ActiveDirectory. Конфигурация области в domain.xml выглядит следующим образом:

<auth-realm name="ActiveDirectory" classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm">
  <property description="null" name="directory" value="ldap://ad.local:389"></property>
  <property description="null" name="base-dn" value="DC=ad,DC=local"></property>
  <property name="jaas-context" value="ldapRealm"></property>
  <property name="assign-groups" value="Users"></property>
  <property name="search-filter" value="(&amp;(objectCategory=person)(objectClass=user)(sAMAccountName=%s))"></property>
  <property name="search-bind-password" value="topsecret"></property>
  <property name="group-search-filter" value="(&amp;(objectCategory=group)(member=%d))"></property>
  <property name="search-bind-dn" value="CN=read only,OU=@ServiceAccounts,DC=ad,DC=local"></property>
</auth-realm>

Кроме того, эта JVM-опция установлена ​​(как указано во многих руководствах):

<jvm-options>-Djava.naming.referral=follow</jvm-options>

web.xml для приложения настраивает это (да, очень просто):

...
<security-constraint>
    <display-name>OnlyAD</display-name>
    <web-resource-collection>
        <web-resource-name>/SubgroupFacade</web-resource-name>
        <description/>
        <url-pattern>/SubgroupFacade</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <description/>
        <role-name>Users</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>ActiveDirectory</realm-name>
</login-config>
<security-role>
    <description/>
    <role-name>Users</role-name>
</security-role>
...

Запуск Glassfish работает нормально. Посещение SubgroupFacade-Servlet тоже работает: появляется окно входа в систему. Я ввожу правильное имя пользователя и соответствующий пароль и ... окно просто появляется снова.

Журнал показывает, что необработанный поиск соединения и поиск в обычном режиме пользователя работает, но поиск группы не удается с одним (вероятно, двумя) Исключениями:

WARNUNG: SEC1106: Error during LDAP search with filter [(&(objectCategory=group)(member=CN=Someuser Joe,OU=Users,OU=Fizzlecorp,DC=ad,DC=local))].
WARNUNG: SEC1000: Caught exception.
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=ad,DC=local'
...
WARNUNG: SEC1106: Error during LDAP search with filter [(&(objectclass=groupofuniquenames)(objectclass=*groupofurls*))].
WARNUNG: SEC1000: Caught exception.
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=ad,DC=local'
...

Запуск LDAP-запросов во внешнем приложении (например, простом ldapsearch на терминале) работает. Я получаю все группы Джо Someuser. Однако второй запрос ((&(objectclass=groupofuniquenames)(objectclass=*groupofurls*))) не возвращает никаких результатов ... и я не смог получить никакой информации о том, что должен делать этот запрос.

Я надеюсь, что у кого-то есть представление о том, что здесь происходит не так. Этот продолжает избивать меня с тех пор, как я пришел на работу сегодня утром (здесь уже поздний вечер ...).

Заранее спасибо! Ben

1 Ответ

0 голосов
/ 01 сентября 2011

Добавить в <auth-realm> свойство <property name="java.naming.referral" value="follow"></property>

Это помогло мне.

...