Здесь были некоторые вопросы по этой теме, но ни один из ответов не помог, или темы, кажется, умерли ... так что вот еще один:
Я пытаюсь выполнить аутентификацию своих веб-приложений через сервер 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="(&(objectCategory=person)(objectClass=user)(sAMAccountName=%s))"></property>
<property name="search-bind-password" value="topsecret"></property>
<property name="group-search-filter" value="(&(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