2015-07-30 12 views
6

Migriamo da WAS a JBoss EAP 6.4.0.GA (AS 7.5.0) e non riesco a configurare Active Directory per proteggere la nostra applicazione web. La mia configurazione è stata ispirata da http://middlewaremagic.com/jboss/?p=378 ma non funziona per 7.5.0.Come configurare Active Directory per JBoss EAP 6.4.0.GA (AS 7.5.0)

Ecco il frammento di dominio Sicurezza in standalone.xml

<security-domain name="ad_security_domain" cache-type="default"> 
        <authentication> 
         <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required"> 
          <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> 
          <module-option name="java.naming.provider.url" value="ldap://10.175.35.60:389"/> 

          <module-option name="bindDN" value="CN=AD Reader,OU=Users,OU=XXX Group,DC=ferradev,DC=fe"/> 
          <module-option name="bindCredential" value="secret"/> 

          <module-option name="baseCtxDN" value="OU=Users,OU=XXX Company,OU=XXX Group,DC=ferradev,DC=fe"/> 
          <module-option name="baseFilter" value="(sAMAccountName={0})"/> 

          <module-option name="rolesCtxDN" value="OU=Groups,OU=XXX Company,OU=XXX Group,DC=ferradev,DC=fe"/> 
          <module-option name="roleFilter" value="(member={1})"/> 
          <module-option name="roleAttributeID" value="memberOf"/> 
          <module-option name="roleAttributeIsDN" value="true"/> 
          <module-option name="roleNameAttributeID" value="cn"/> 

          <module-option name="allowEmptyPasswords" value="false"/> 
          <module-option name="Context.REFERRAL" value="follow"/> 
          <module-option name="throwValidateError" value="true"/> 
          <module-option name="searchScope" value="SUBTREE_SCOPE"/> 
         </login-module> 
         <login-module code="org.jboss.security.auth.spi.RoleMappingLoginModule" flag="optional"> 
          <module-option name="rolesProperties" value="${jboss.server.config.dir}/fop-roles.properties"/> 
         </login-module> 
        </authentication> 
       </security-domain> 

Ho questo codice nel mio jboss-web.xml

<?xml version="1.0"?> 
<jboss-web> 
    <security-domain>ad_security_domain</security-domain> 
</jboss-web> 

Nella directory di configurazione (dove il file standalone.xml è) Ho il file delle proprietà fop-roles.properties

APP_GG_FOP_DEV_ADMINS=Administrators 

Ecco frammento della mia web.xml

<security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Admin Resources</web-resource-name> 
      <url-pattern>/configuration/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>Administrators</role-name> 
     </auth-constraint> 
     <user-data-constraint> 
      <transport-guarantee>NONE</transport-guarantee> 
     </user-data-constraint> 
</security-constraint> 

.... 

<security-role> 
     <description>Administrators Role</description> 
     <role-name>Administrators</role-name> 
</security-role> 

Bellow sono le schermate della struttura del nostro Active Directory:

Gruppi: enter image description here

utenti: Users structure

Dopo deploymnet con successo l'applicazione web per JBoss viene visualizzata la pagina di login, ma dopo aver riempito le credenziali ho sempre ottenuto l'errore:

TRACE [org.jboss.security] (ServerService pool di thread - 100 PBOX000354: Impostazione dei ruoli di sicurezza ThreadLocal: null

risposta

2

Il RoleMappingLoginModule non funziona correttamente in JBoss AS7 + (EAP 6+). Può causare i problemi nel tuo scenario.

Utilizzare il modulo di accesso (Opzione 1) password stacking e UsersRoles oppure (Opzione 2) utilizzare direttamente la funzione di mappatura del ruolo.

Opzione 1:

<security-domain name="ad_security_domain" cache-type="default"> 
    <authentication> 
    <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required"> 
     <!-- Put your original module options for LDAP here and add following: --> 
     <module-option name="password-stacking" value="useFirstPass" /> 
    </login-module> 
    <login-module code="UsersRoles" flag="optional"> 
     <module-option name="password-stacking" value="useFirstPass" /> 
     <module-option name="rolesProperties" value="${jboss.server.config.dir}/fop-roles.properties" /> 
    </login-module> 
    </authentication> 
</security-domain> 

Opzione 2:

<security-domain name="ad_security_domain" cache-type="default"> 
    <authentication> 
    <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required"> 
     <!-- Put your original module options for LDAP here --> 
    </login-module> 
    </authentication> 
    <mapping> 
    <mapping-module code="PropertiesRoles" type="role"> 
     <module-option name="rolesProperties" value="${jboss.server.config.dir}/fop-roles.properties" /> 
    </mapping-module> 
    </mapping> 
</security-domain> 
+1

Grazie mille per la risposta, ho provato entrambe le opzioni ma ancora lo stesso errore. Quindi sembra che il problema sia anche nelle opzioni del modulo per LDAP. Saresti così gentile da ispezionarlo e aiutarmi, per favore? – jGuru

4

recente ho passato un po 'di tempo LDAP configurazione con Active Directory. Ho trovato un buon modo per testare installare Apache Directory Server e utilizzarlo per il debugging locale.

<security-domain name="LdapSecurityDomain" cache-type="default"> 
<authentication> 
    <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required"> 
     <module-option name="password-stacking" value="useFirstPass"/> 
     <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> 
     <module-option name="java.naming.provider.url" value="ldap://your.ldap.host:389/"/> 
     <module-option name="java.naming.security.authentication" value="simple"/> 
     <module-option name="bindDN" value="uid=BindUser,OU=Users,DC=yourCompany,DC=biz"/> 
     <module-option name="bindCredential" value="theBindUserPassword"/> 
     <module-option name="baseCtxDN" value="OU=Users,DC=yourCompany,DC=biz"/> 
     <module-option name="baseFilter" value="(uid={0})"/> 
     <module-option name="roleFilter" value="(member={1})"/> 
     <module-option name="rolesCtxDN" value="OU=RoleGroups,DC=yourCompany,DC=biz"/> 
     <module-option name="roleAttributeID" value="cn"/> 
     <module-option name="roleNameAttributeID" value="cn"/> 
     <module-option name="roleRecursion" value="0"/> 
     <module-option name="throwValidateError" value="true"/> 
     <module-option name="java.naming.referral" value="follow"/> 
     <module-option name="searchScope" value="SUBTREE_SCOPE"/> 
     <module-option name="unauthenticatedIdentity" value="unauthenticated"/> 
     <module-option name="allowEmptyPasswords" value="false"/> 
    </login-module> 
</authentication> 

+0

Se si guardano gli screenshot del mio annuncio quale modulo-opzione dovrei cambiare per conformarmi al mio annuncio? – jGuru

+0

Vedo che hai la seguente opzione impostata così il login dell'utente con fop.account.adim come nome utente? il mio consiglio è di utilizzare un browser LDAP come Apache Directory per navigare sul LDAP di Active Directory in modo da ottenere i filtri e i DN di contesto corretti. – ozOli

+0

Sì, il nome utente è fop.account.admin ad es. – jGuru

2

Il vincolo ruolo nella vostra web.xml dice amministratori, ma i diversi ruoli che sono possibili dai vostri roleCtxDn UO = Gruppi, OU = XXX Company, OU = Gruppo XXX, DC = ferradev, DC = fe sono APP_GG_FOR_DEV_ADMINS, APP_GG_FOR_DEV_MANAGERS, APP_GG_FOR_DEV_USERS e APP_GG_FOR_DEV_WS_ADMINS.

Utilizzare inoltre tutte le opzioni di registrazione TRACE descritte in https://developer.jboss.org/wiki/SecurityFAQ per risolvere il problema.

+1

utente "kwart" ha dato 2 opzioni su come rimappare i ruoli – jGuru

Problemi correlati