Endlich komme ich gegen Ende der Woche mal wieder dazu etwas über meine Arbeit an TYPO3 zu bloggen. Die letzte Zeit hatten wir ziemlich damit zu kämpfen, unsere TYPO3-Instanz an das universitäte LDAP anzubinden.
Ausgangslage: Bei uns an der Universität ist ein LDAP-Verzeichnis aktiv, dass die Accountdaten für sämtliche Mitglieder der Universität speichert. Es wäre also sinnvoll auch die Authentifzierung für unser TYPO3 darüber zu machen, da wir uns eine eigene Passwort- und Benutzerverwaltung innerhalb TYPO3 damit zumindest erleichtern können. Auch wenn sie nicht ganz wegfällt. Problematisch dabei ist, dass das LDAP wie so häufig historisch gewachsen ist und das LDAP-Schema dadurch nicht gerade komfortabel.
Weg und Lösung: Wir begannen als Basis mit der verbreiteten eu_ldap Extension, die unseren Anforderungen relativ nahe kam. Trotzdem waren noch einige Anpassungen nötig. Zuerst ist es bei uns so, dass die Benutzer über eine eindeutige ID identifiziert werden, wir aber den Login über den leichter zu merkenden E-Mail-Alias (vorname.nachname) haben wollten. Deshalb mussten wir in eu_ldap einen Zwischenschritt einbauen, der zuerst den Benutzer mit dem Alias gegen das LDAP-Verzeichnis authentifziert, dann die eindeutige ID ermittelt und mit dieser im weiteren Verlauf die Gruppenzuordnung herstellt.
Leider konnten wir nicht dem Benutzer einfach ein Attribut zuweisen, sondern mussten den Weg gehen für das TYPO3 eine neue Gruppe (ou=typo3) anzulegen, in der die IDs der erlaubten Benutzer (memberUID) geschrieben werden. Über die Einschränkung nur Benutzer aus Gruppe in eu_ldap können wir so die Authentifzierung nach unseren Wünschen durchführen.
Als nächstes Problem stellte sich der Import neuer User ins TYPO3 dar. Benutzer werden in einer externen, proprietären Anwendung in die TYPO3-Gruppe verschoben oder entfernt und stehen dann für TYPO3 zur Verfügung. Entweder wartet man bis sich der Benutzer das erste Mal einloggt, dann wird er importiert. Dies ist aber sehr unkomfortabel, da wir ihm erst nach dem 1. Einloggen die TYPO3-Gruppen zuordnen können, die ihm Rechte und Zugriff auf bestimmte Zweige des Baumes geben. Der manuelle Import neuer Benutzer durch eu_ldap funktionierte zwar im Prinzip, zeigte aber den unschönen Effekt, dass der gesamte LDAP-Baum durchlaufen und jeder Benutzer einzeln auf Zugehörigkeit überprüft wird. Bei knapp 15.000 Benutzern im LDAP aus Performance-Gründen nicht akzeptabel. Wir haben daraufhin das Backend-Modul von eu_ldap um zwei Importmöglichkeiten erweitert. Entweder ein einzelner Benutzer kann über seinen Alias importiert werden, oder gleich eine ganze komma-separierte Liste an Benutzern. Dabei wird nicht der ganze Baum, sondern nur der eingegebene Benutzer überprüft.
Das letzte Problem war schließlich ein altbekanntes von eu_ldap. Manuell zugeordnete Gruppen werden beim Re-Import des Benutzers nach dem Einloggen gelöscht. Da wir aber die TYPO3-Gruppen nicht im LDAP zuordnen können, sondern dies weiterhin in TYPO3 geschehen muss, mussten wir eine Unterscheidung zwischen LDAP-Gruppen und "normalen" Gruppen herstellen. Hierbei half uns der von Tom Gottschalk in seiner Diplomarbeit "Entwicklung einer interaktiven Publikations-Plattform mit Redaktionssystem für den Fachbereich Medien der Hochschule Mittweida (FH)" entwickelte Hack sehr weiter, den wir nahezu unverändert übernehmen konnten. Danke schön!
Daneben waren noch einige kleiner Anpassungen am Code, eine eigene Logging-Funktion zum Debuggen und vieles mehr nötig, so dass wir eu_ldap doch deutlich modifziert und auf uns zugeschnitten haben. OpenSource zeigt hier seine Stärken, die Flexibilität und Anpassbarkeit - besonders von TYPO3 - ist klasse.
Jetzige Situation: Derzeit läuft es so ab, dass wir einen neuen Benutzer extern zum TYPO3-User machen, ihn danach über unser modifiziertes eu_ldap ins TYPO3-Backend importieren und dort dann die Gruppen zuweisen. Soll ein Benutzer kein TYPO3-Admin mehr sein, dann nehmen wir einfach aus der LDAP-Gruppe raus oder der Account wird durch Ausscheiden aus der Uni automatisch inaktiv.
Im nächsten Schritt müssen wir uns noch Gedanken über die Realisierung von Frontend-Login machen, um bestimmte Bereiche nur Mitgliedern der Universität oder einzelnen Fachbereichen zugänglich zu machen. Das steht auf der Agenda aber nicht ganz oben.



sehr informativer Artikel
Wir benutzen übrigens eu_ldap für die Anbindung an ein ActiveDirectory (LDAP). Das funktioniert auch recht gut. Wie schon beschrieben mussten wir die Gruppenzugehörigkeit allerdings auch im AD abbilden. Das ist für unsere Anwendung kein Problem, wir haben einfach eine OU im AD für die Gruppen angelegt.
Viele Grüße
Jürgen Leister
Viele
Danke für den Bericht. Das Problem mit den Gruppen hatte ich nicht, da ich die Gruppen gleich direkt im LDAP anlegen ließ.
Die Lösung mit dem importieren einzelner Accounts wäre jedoch sehr interessant. Könnte man sich die Lösung malansehen?
Danke!
Gruß
Bernhard
Wenn man Bugs oder Features hat, kann man diese dort eintragen.
Man findet auch die neuste Entwicklungsversion im SVN Repository!
Bringt Euch doch dort ein, damit die Extension weiter lebt!
Schön, dass sich für die Erweiterung doch wieder etwas tut.
Habe die neue Version (nicht die Trunk) gleich mal getestet und festgestellt, dass damit die Authentifizierung - zumindest mit meiner verwendeten TYPO3 Version 4.2.11 nicht mehr funktioniert, sowohl über LDAP-, als auch über TYPO3-Accounts.
Im Bugtracker habe ich eu_ldap nicht gefunden und unter Forge kann man noch keine Issues hinzufügen, deshalb habe ich direkt mal eine Mail an den Entwickler geschickt.
Tizian (vom cabag team) unterstützt ihn so weit es geht. Tizian wird den Issue Tracker aktivieren sobald er Zugriff hat.
Gruss Jonas