Apache Tomcat

Via JNDI-Realm kann Apache Tomcat angewiesen werden, Benutzer, Gruppen und Rollen aus einer LDAP-Quelle, zB. Active Directory zu laden. Die größte Herausforderung liegt darin, die AD-Gruppen zu Tomcat-Rollen zu „mappen“.

Sofern die Rolle der Tomcat Applikation dem Namen der AD-Gruppe entspricht ist das Mapping trivial. Wenn nicht – zB. weil es eine Konvention für AD-Gruppennamen gibt und die Legacy Tomcat-Applikation fix codierte Rollennamen erwartet… siehe Workaround unten.

Im Beispiel werden wir die Tomcat-Rolle „reporting“ mit der AD-Gruppe „Tomcat_Reporting“ verknüpfen.

  • Dazu legen wir im ersten Schritt eine AD-Gruppe mit dem Namen „Tomcat_Reporting“ an und weisen die gewünschten AD-Benutzer zu.
  • Im Feld „Notizen“ (aka „Info“) der Gruppe tragen wir den Namen der Tomcat-Rolle „reporting“ ein.
  • Als nächstes müssen wir in der „server.xml“ Konfigurationsdatei die JNDI-Realm konfigurieren. (Beispiel siehe unten.)
  • Die Einträge beginnend mit „connection…“ verweisen auf die AD-Infrastruktur und den Login-Account für die LDAP-Abfrage,
  • die „user…“ Konfiguration setzt die Suchfilter für die Abfrage und
  • Einträge beginnend mit „role…“ geben an, (a) welche AD-Gruppen berücksichtigt werden und (b) in welchem Feld der Rollen-Name gesucht wird. (Im Beispiel passiert das Mapping über ‚roleName=“info“‚.)

Beispiel JNDI Realm Konfiguration (server.xml):

<Realm className="org.apache.catalina.realm.JNDIRealm" 
  referrals="follow"

  connectionURL="ldap://ad.domain.com:3268"
  connectionName="CN=Tomcat Serviceuser,OU=ServiceUser,DC=ad,DC=domain,DC=com"
  connectionPassword="komplexes Passwort des Tomcat Service-Users"

  userBase="DC=ad,DC=domain,DC=com"
  userSearch="(sAMAccountName={0})"
  userSubtree="true"
  userRoleName="memberOf"

  roleBase="OU=Tomcat Application,OU=Security Groups,DC=ad,DC=domain,DC=com"
  roleSearch="(member={0})"
  roleName="info"
  roleSubtree="false"
/>

PS.: Bitte um Info, wenn es einen eleganteren Weg gibt das Problem zu lösen.