2015-07-30 33 views
6

Przeprowadzamy migrację z WAS do JBoss EAP 6.4.0.GA (AS 7.5.0) i nie mogę skonfigurować Active Directory do chroń naszą aplikację internetową. Moja konfiguracja została zainspirowana przez http://middlewaremagic.com/jboss/?p=378, ale nie działa dla wersji 7.5.0.Jak skonfigurować Active Directory dla JBoss EAP 6.4.0.GA (AS 7.5.0)

Oto fragment zabezpieczeń domeny w 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> 

Mam ten kod w moim jboss-web.xml

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

w katalogu konfiguracyjnym (gdzie plik standalone.xml) Mam plik właściwości fop-roles.properties

APP_GG_FOP_DEV_ADMINS=Administrators 

Oto fragment mojego 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 są screeny z naszej struktury Active Directory:

grupy: enter image description here

Użytkownicy: Users structure

Po udanej deploymnet aplikacji internetowej do JBoss strona logowania jest pokazany ale po napełnieniu poświadczenia zawsze dostaje błąd:

TRACE [org.jboss.security] (ServerService puli wątków - 100) PBOX000354: Ustawianie ról bezpieczeństwa ThreadLocal: null

Odpowiedz

2

Urządzenie RoleMappingLoginModule nie działa poprawnie w JBoss AS7 + (EAP 6+). Może to powodować problemy w twoim scenariuszu.

Skorzystaj z modułu logowania (Opcja 1): password stacking i UsersRoles lub (Opcja 2), korzystając bezpośrednio z funkcji odwzorowania roli.

Wariant 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> 

Opcja 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

Dziękuję bardzo za odpowiedź, próbowałem obie opcje, ale nadal ten sam błąd. Wygląda więc na to, że problemem są również opcje modułów dla LDAP. Czy byłbyś tak dobry, by to sprawdzić i mi pomóc? – jGuru

4

Niedawno spędziłem sporo czasu na konfigurację protokołu LDAP z Active Directory. Znalazłem dobry sposób na przetestowanie instalacji serwera Apache Directory Server i użycia go do lokalnego debugowania.

<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

Jeśli spojrzysz na zrzuty ekranu mojego AD, jakie opcje modułu powinienem zmienić, aby zachować zgodność z moim AD? – jGuru

+0

Widzę, że masz następującą opcję set więc czy login użytkownika z fop.account.adim jest nazwą użytkownika? moją radą jest użycie przeglądarki LDAP, takiej jak Apache Directory, do przeglądania LDAP Active Directory, aby uzyskać prawidłowe filtry i nazwy wyróżniające kontekst. – ozOli

+0

Tak, nazwa użytkownika to np. Fop.account.admin np. – jGuru

2

Ograniczenie roli w web.xml mówi Administratorzy ale różne role, które są możliwe ze swoimi roleCtxDn OU = grup, OU = XXX Company, OU = Grupy XXX, DC = ferradev, DC = fe to APP_GG_FOR_DEV_ADMINS, APP_GG_FOR_DEV_MANAGERS, APP_GG_FOR_DEV_USERS i APP_GG_FOR_DEV_WS_ADMINS.

Użyj również wszystkich opcji rejestrowania TRACE opisanych w https://developer.jboss.org/wiki/SecurityFAQ, aby pomóc w rozwiązaniu problemu.

+1

użytkownik "kwart" podał 2 opcje zmiany przypisania ról – jGuru