2013-07-18 17 views
5

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.

risposta

0

L'autenticazione è avvenuta correttamente.

Poiché si desidera consentire a tutti gli utenti autenticati di accedere a tutto, è comunque necessario proteggere il pattern URL/* come si sta facendo. È possibile utilizzare RegExpAuthorizationFilter (vedere https://wiki.apache.org/solr/SolrSecurity). Ora, non includono questa classe nella distribuzione regolare. Ho trovato il codice qui (https://issues.apache.org/jira/secure/attachment/12572819/SOLR-4470_branch_4x_r1454444.patch) e lo ho compilato facilmente.

Quando si configura il filtro, specificare un pattern URL arbitrario (inesistente, come/abcde) con qualsiasi ruolo. Il modo in cui funziona è che vedrà se l'URL richiesto corrisponde a questo modello. Dal momento che non lo fa, va avanti. Ma non ci sono più regole e l'accesso è consentito.

Quindi richiede l'autenticazione per tutti gli URL ma tutti gli URL validi saranno accessibili dopo l'autenticazione riuscita.

La mia configurazione era nel contesto di solr in esecuzione su Jetty. Tuttavia, penso che tutta la mia configurazione fosse legata alle cose standard come web.xml.

0

è necessario modificare web.xml per utilizzare il ruolo speciale ** come indicato qui: Authorization section for Jetty Authentication:

accesso concesso a qualsiasi utente che viene autenticato, a prescindere dei ruoli. Ciò è indicato dal valore speciale di "**" per il ruolo-nome > di un < auth-constraint > nel < security-constraint >

Quindi <, questo è ciò che la mia sicurezza-constraint assomiglia :

<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> 
Problemi correlati