Sto lavorando a un'applicazione Java molto semplice che deve essere protetta con un nome utente e una password. Devo usare Active Directory per l'autenticazione. Posso solo consentire agli utenti autenticati di accedervi. Non ho bisogno di alcun tipo di controllo di gruppo/ruolo per determinare ciò che gli utenti possono vedere o meno. Sto usando JETTY per eseguire l'applicazione.Jetty - JAAS e Active Directory - Solo autenticazione?
Ho cercato già da un po 'di tempo di implementare il modulo di login LDAP con Jetty. Ma ogni volta che invio il modulo di login, ottengo un errore 403 con il messaggio "! Role".
HTTP ERROR 403
Problem accessing /JAAS/. Reason:
!role
Jetty standard output quando inviare il modulo di login:
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
file di log Jetty quando inviare il modulo di login (username ho inserito viene visualizzato nel registro, in modo da una parte l'autenticazione sembra al lavoro):
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
estratto del web.xml in cui sono dichiarati security-constraint e sicurezza-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 file di configurazione del modulo di login (ldaploginmodule.conf): configurazione
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 regno (my-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>
Infine, il comando di avvio pontile:
Ho controllato il registro eventi di sicurezza di Windows e vedo una voce di controllo riuscita per un accesso per r l'utente che ho fornito nel modulo di accesso.
Il fatto è che non ho bisogno di alcun ruolo. Voglio solo eseguire l'autenticazione e consentire a tutti gli utenti autenticati di accedere all'applicazione.
Qualche idea su come potrei avere solo l'autenticazione ed evitare i ruoli? Stavo pensando di sovrascrivere la classe LdapLoginModule e forzare un ruolo "fittizio" che dichiarerei in web.xml. Ma non sono sicuro se questo sia il modo giusto per farlo.