Активный каталог Glassfish JAAS

Я пытаюсь использовать JAAS в Glassfish для обработки аутентификации и авторизации в своих веб-приложениях в Active Directory. Прежде всего, я написал несколько программ POJO, которые могут успешно подключаться к моему AD и аутентифицироваться в отношении пользователей и групп, которые я настроил. Поэтому я уверен, что имена пользователей, пароли и группы, которые я использую в своем веб-приложении, верны.

Я следую этому руководству, чтобы настроить Realm в Glassfish для обработки аутентификации и авторизации внутри моего webapp. Я изменил свои файлы web.xml и sun-web.xml своими данными, которые мне нужны.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
  <context-root>/myapp</context-root>
  <security-role-mapping>
<role-name>authorized</role-name>
<group-name>Test</group-name>
  </security-role-mapping>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class java code.</description>
    </property>
  </jsp-config>
</sun-web-app>
5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
  <context-root>/myapp</context-root>
  <security-role-mapping>
<role-name>authorized</role-name>
<group-name>Test</group-name>
  </security-role-mapping>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class java code.</description>
    </property>
  </jsp-config>
</sun-web-app>
5.xsd" id="WebApp_ID" version="2.5"> <display-name>myapp</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <login-config> <auth-method>FORM</auth-method> <realm-name>activedirectory</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.html</form-error-page> </form-login-config> </login-config> <security-role> <role-name>authorized</role-name> </security-role> <security-constraint> <display-name>Security</display-name> <web-resource-collection> <web-resource-name>Secured</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>authorized</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> </web-app>

и мой sun-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
  <context-root>/myapp</context-root>
  <security-role-mapping>
<role-name>authorized</role-name>
<group-name>Test</group-name>
  </security-role-mapping>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class java code.</description>
    </property>
  </jsp-config>
</sun-web-app>

Мое царство

name: activedirectory
class name: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
JAAS context: ldapRealm
Directory: ldap://myADServersIPAddress:389
Base DN:   DC=myAD,DC=com
search-filter             (&(objectClass=user)(userPrincipalName=%s))
search-bind-password      fakepasswordhere
group-search-filter       (&(objectClass=group)(member=%d))
search-bind-dn            DN=Administrator

Сообщение об ошибке, которое я получаю в своих журналах, когда я вхожу в систему и не удается, это

Login failed: javax.security.auth.login.LoginException:  
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-
0C090290, comment: AcceptSecurityContext error, data 525, v893]

Я провел небольшое исследование кода ошибки «данные 525» и, по-видимому, это означает, что имя пользователя недействительно. Я использую идентификатор и пароль, которые я знаю, что они действительны, и я знаю, что является членом «Test», как определено в моем sun-web.xml. Я пробовал формат userPrincipal (имя пользователя @ домен) с текущими настройками, а также форму sAMAccountName (домен \ имя пользователя) безуспешно. Я также изменил поисковый фильтр в своей области, чтобы использовать sAMAccountName, где userPrincipalName, и это тоже не сработало с использованием обеих комбинаций. Есть ли у кого-нибудь подсказки или предложения? Я чувствую, что провел исследование и очень близок к этому, но очень застрял на этом этапе. Спасибо, если кто-нибудь действительно найдет время, чтобы все это прочитать!


person Matt Phillips    schedule 26.06.2010    source источник


Ответы (2)


То, что я бы на самом деле проверил, могло бы быть вашими учетными данными поиска, поскольку вы выполняете поиск на основе DN = Administrator, верно? Вы пробовали дать ему полный dn учетной записи администратора для search-bind-dn? Обычно по умолчанию это DN=Administrator, CN=Users, DC=myAD, DC=com в зависимости от приведенной выше информации.

person REW    schedule 29.06.2010

Я согласен с REW - мой search-bind-dn должен быть полностью квалифицированным, чтобы идентификатор search-bind работал.

person Jon    schedule 02.08.2010