GlassFish Security Realm, Active Directory и рекомендации - PullRequest
1 голос
/ 28 апреля 2010

Я установил область безопасности в Glassfish для аутентификации на сервере Active Directory. Конфигурация области следующая:

Class Name: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
JAAS context:  ldapRealm
Directory: ldap://172.16.76.10:389/
Base DN:  dc=smallbusiness,dc=local
search-filter: (&(objectClass=user)(sAMAccountName=%s))
group-search-filter: (&(objectClass=group)(member=%d))
search-bind-dn: cN=Administrator,CN=Users,dc=smallbusiness,dc=local
search-bind-password: abcd1234!

Область является функциональной, и я могу войти в систему, но при каждом входе в систему в журнале появляется следующая ошибка:

SEC1106: Error during LDAP search with filter [(&(objectClass=group)(member=CN=Administrator,CN=Users,dc=smallbusiness,dc=local))].
SEC1000: Caught exception.
    javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'dc=smallbusiness,dc=local'
        at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2820)
        ....
        ....
ldaplm.searcherror

При поиске решения я обнаружил, что было рекомендовано добавить java.naming.referral=follow в свойства области. Однако после того, как я добавлю это, GlassFish пройдет 20 минут для аутентификации в Active Directory. Я подозреваю, что это проблема DNS на сервере Active Directory. Сервер Active Directory - это обычная установка Windows Server 2003 на виртуальной машине.

Любая помощь / рекомендация высоко ценится!

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Это конфигурация, которую я использую в своем файле domain.xml, она может вас заинтересовать:

<auth-realm classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm" name="ldapRealm"> 
      <property name="search-bind-password" value="Demodemo01"/> 
      <property name="search-bind-dn" value="Administrator"/> 
      <property name="search-filter" value="(&amp;(objectClass=user)(sAMAccountName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"/> 
      <property name="group-search-filter" value="(&amp;(objectClass=group)(member=%d))"/> 
      <property name="jaas-context" value="ldapRealm"/> 
      <property name="base-dn" value="CN=Users,DC=saierp,DC=net"/> 
      <property name="directory" value="ldap://192.168.1.38:389"/> 
</auth-realm>

Специально, убедитесь, что добавили userAccountControl в ваш фильтр, иначе отключенные учетные записи в AD будут разрешены для подключения.

0 голосов
/ 04 декабря 2010

Это было безумно пытаться решить эту проблему ... Glassfish 3.0.1 пытается подключиться к Windows и получает вышеуказанную ошибку.

Я вообще не Windows и не LDAP-одаренный ... но наконец-то нашел это:

http://forum.springsource.org/showthread.php?t=87673

И самая последняя строка - это ключ: используйте «Порт глобального каталога» - вместо 389 он по умолчанию равен 3268. И исключение исчезает.

Почему?

Кому интересно?

(ну, хорошо, я сейчас прочитаю об этом.)

0 голосов
/ 26 августа 2010

Надеюсь, вы решили это, но на всякий случай:

  1. Я использовал 'objectCategory' вместо 'objectClass', так как я читал, что первые проиндексированы, следовательно, быстрее.

  2. Мне пришлось добавить это свойство:

    property name = "assign-groups" value = "Пользователи домена"

где «Пользователи домена» - это группа в AD, в которую помещены все наши пользователи. Это должно соответствовать значению в sun-web.xml для сопоставления ролей безопасности.

Позже мне удалось создать определенную группу для этого приложения и внести соответствующие изменения.

...