2013-07-18 5 views
5

Я работаю над очень простым Java-приложением, которое необходимо защитить с помощью имени пользователя и пароля. Я должен использовать Active Directory для аутентификации. Я могу разрешить доступ только к аутентифицированным пользователям. Мне не нужна какая-либо проверка группы/роли, чтобы определить, что пользователи могут видеть или нет. Я использую JETTY для запуска приложения.Jetty - JAAS и Active Directory - только аутентификация?

Я уже довольно давно пытаюсь внедрить модуль регистрации LDAP с Jetty. Но каждый раз, когда я отправляю форму для входа, я получаю ошибку 403 с сообщением «! Role».

HTTP ERROR 403 

Problem accessing /JAAS/. Reason: 

    !role 

Jetty стандартный вывод, когда я представить регистрационную форму:

2013-07-18 19:28:47.035:INFO:oejpjs.LdapLoginModule:Searching for users with filter: '(&(objectClass={0})({1}={2}))' from base dn: DC=mydomain,DC=test,DC=local 
2013-07-18 19:28:47.041:INFO:oejpjs.LdapLoginModule:Found user?: true 
2013-07-18 19:28:47.042:INFO:oejpjs.LdapLoginModule:Attempting authentication: CN=User Name,OU=ADMIN_HOME,DC=mydomain,DC=test,DC=local 

файл журнала Jetty, когда я отправить форму (имя пользователя я вошел, появится в журнале, поэтому часть аутентификации кажется работать):

0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:38 +0000] "GET /JAAS/ HTTP/1.1" 302 0 
0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:38 +0000] "GET /JAAS/login.html HTTP/1.1" 304 0 
0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:47 +0000] "POST /JAAS/j_security_check HTTP/1.1" 302 0 
0:0:0:0:0:0:0:1 - username [18/Jul/2013:17:28:47 +0000] "GET /JAAS/ HTTP/1.1" 403 1362 

Экстракт из web.xml, где объявляются безопасности ограничения и безопасности Roke:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Entire Application</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 

    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <security-role> 
     <role-name>*</role-name> 
    </security-role> 

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

    <security-role> 
     <role-name>MyLocalGroup</role-name> 
    </security-role> 

LDAP конфигурационный файл Логин модуль (ldaploginmodule.conf): конфигурация

myloginmodule { 
    org.eclipse.jetty.plus.jaas.spi.LdapLoginModule required 
    debug="true" 
    debugNative="true" 
    contextFactory="com.sun.jndi.ldap.LdapCtxFactory" 
    hostname="ldapserver" 
    port="389" 
    bindDn="CN=Administrator,CN=Users,DC=mydomain,DC=test,DC=local" 
    bindPassword="secret" 
    directGroupExtraction="true" 
    userGroupAttribute="cn" 
    allRolesMode="authOnly" 
    userFilter="(objectClass=organizationalPerson)" 
    authenticationMethod="simple" 
    forceBindingLogin="true" 
    userBaseDn="DC=mydomain,DC=test,DC=local" 
    userRdnAttribute="cn" 
    userIdAttribute="sAMAccountName" 
    userPasswordAttribute="unicodePwd" 
    userObjectClass="user" 
    roleSearch="(member={0})" 
    roleName="cn" 
    roleSubtree="true" 
    roleBaseDn="CN=Users,DC=mydomain,DC=test,DC=local"; 
    }; 

Jetty область (мой-jaas.xml):

<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- JAAS TEST --> 
    <Call name="addBean"> 
     <Arg> 
      <New class="org.eclipse.jetty.plus.jaas.JAASLoginService"> 
      <Set name="Name">Test JAAS Realm</Set> 
      <Set name="LoginModuleName">myloginmodule</Set> 

      <Set name="roleClassNames"> 
       <Array type="java.lang.String"> 
        <Item>org.eclipse.jetty.plus.jaas.JAASRole</Item> 
       </Array> 
      </Set> 

      </New> 
     </Arg> 
    </Call> 

</Configure> 

Наконец, команда запуска молы:

java -Xdebug -Djava.naming.referral=follow -Djava.security.auth.login.config=etc/ldaploginmodule.conf -jar start.jar etc/my-jaas.xml 

Я проверил журнал событий безопасности Windows, и я вижу успешную запись аудита для входа в систему fo пользователя, которого я предоставил в форме входа.

Дело в том, что мне не нужна роль. Я просто хочу выполнить проверку подлинности и разрешить всем пользователям, прошедшим проверку подлинности, доступ к приложению.

Любая идея, как я мог бы иметь только аутентификацию и избегать ролей? Я думал об переопределении класса LdapLoginModule и принудительной роли «манекена», которую я объявлял бы в web.xml. Но я не уверен, что это правильный способ сделать это.

ответ

0

Ваша аутентификация прошла успешно.

Поскольку вы хотите разрешить всем пользователям, прошедшим проверку подлинности, доступ ко всему, вам все равно необходимо защитить шаблон URL/*, как вы это делаете. Вы можете использовать RegExpAuthorizationFilter (см. https://wiki.apache.org/solr/SolrSecurity). Теперь они не включают этот класс в регулярное распределение. Я нашел код здесь (https://issues.apache.org/jira/secure/attachment/12572819/SOLR-4470_branch_4x_r1454444.patch), и он легко скомпилирован.

При настройке фильтра укажите один произвольный шаблон (несуществующий, как/abcde) URL с любой ролью. Способ его работы заключается в том, что он увидит, соответствует ли запрашиваемый URL этому шаблону. Так как это не так, он движется вперед. Но правил больше нет, и доступ разрешен.

Для этого требуется аутентификация для всех URL-адресов, но все успешные URL-адреса будут доступны после успешной аутентификации.

Моя установка была в контексте solr, работающего на Jetty. Тем не менее, я думаю, что вся моя конфигурация была привязана к стандартным материалам, таким как web.xml.

0

Вам нужно изменить web.xml использовать особую роль **, как указано здесь: Authorization section for Jetty Authentication:

доступа, предоставляемые любому пользователю, прошедшего проверку подлинности, независимо от ролей. Об этом свидетельствуют особой ценность «**» для ролевого имени < > из < Идент-ограничения > в < безопасности-ограничении >

Итак, это то, что моя безопасность, ограничение выглядит :

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Secured Solr Admin User Interface</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>**</role-name> 
    </auth-constraint> 
</security-constraint> 
Смежные вопросы