
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.