Я работаю над очень простым 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. Но я не уверен, что это правильный способ сделать это.