Authentifizierung via LDAP - neue Benutzergruppen

  • Moin moin!


    Ich brauche Tipps von euch, wie ich etwas realisieren sollte, bzw. vielleicht habe ich schon so viele Gedanken in das Thema gesteckt, dass ich etwas übersehe.


    Wir haben Joomla als "Intranetportal" im Einsatz. User können sich mit ihren Active Directory Daten anmelden. Gibt es den User noch nicht, wird er in Joomla angelegt. Funktioniert perfekt.


    Da die Gruppenzugehörigkeit derzeit noch manuell geändert werden muss, was aufgrund der Firmengröße und Personalrotation ziemlich zeitintensiv ist, will ich das jetzt ändern.


    Das AD ist unser zentrales Werkzeug für die Userverwaltung und vergibt mit Hilfe der Gruppen auch Berechtigungen. Jeder User ist mindestens einer Gruppe zugeordnet, es können auch Mehrere sein.

    Die Gruppenzugehörigkeit habe ich mir nun mit einem kleinen PHP-Skript geholt und möchte sie nun bei jeder Anmeldung des User überprüfen und ggfls. aktualisieren/neu einfügen.

    Möglich wäre auch die Gruppen nachts zu synchronisieren, sodass "nur noch" die Überprüfung der User gemacht werden muss.

    Ich möchte aber nicht alle Gruppen (z. B. Proxyuser) in Joomla eingefügt haben, sondern nur markante Gruppen, auch die Zugriffsberechtigungen im Arbeitsumfeld regeln. Auch die Infos bekomme ich über das PHP Skript, welches mir genau diese Gruppen anzeigt.


    Meine derzeitigen Überlegungen:

    - ich überlege Joomla- und AD-Gruppen quasi eins zu eins synchron zu halten, denn über Joomla soll noch mehr realisiert werden, was mit den AD Berechtigungen zusammenhängt. Ist das der richtige Ansatz?

    - das "Group Mapping" wäre eine Möglichkeit die Zuordnung JUser:ADUser hinzukriegen? Aber leider nur manuell ...


    Fragen, die ich dazu habe:

    - ich möchte dafür nicht an den Core - wie mache ich es sonst? Ein eigenes Plugin schreiben? Oder Komponente

    - macht es vielleicht mehr Sinn die Gruppen durch Datenbankänderungen via Skript einzupflegen, aber dann bleibt die händische Anpassung der User

    - ist es überhaupt sinnvoll die Datenbank anzupassen, zu ändern? Ich denke da an Updates. Aber durch ein Update werden Gruppenzughörigkeiten ja nicht überschrieben


    Alle Ansätze/Lösungen im Internet sind meistens zu alt oder benutzen das Group Mapping, was aber ja händisch gepflegt werden will.


    Ich bin für jede Anregung, Tipp dankbar, denn ich habe mir bei meinen Vorüberlegungen wahrscheinlich schon so das Gehirn verdreht, das ich mich im Kreis drehe... fie:/:S

  • - ich möchte dafür nicht an den Core - wie mache ich es sonst? Ein eigenes Plugin schreiben? Oder Komponente

    hmm mein Vorschlag wäre ein Plugin / Cronjob welche die Berechtigungen / AD Gruppen synchronisiert:


    Selber auf der Datenbank würde ich nichts machen nimm einfach die Methoden von Joomla z.B. UserHelper: addUserToGroup getUserGroups removeUserFromGroup setUserGroups oder vom UserGroups Model wo Joomla Gruppen anlegt.


    - das "Group Mapping" wäre eine Möglichkeit die Zuordnung JUser:ADUser hinzukriegen? Aber leider nur manuell ...

    Was ist genau mit "Group Mapping" gemeint?



    - ist es überhaupt sinnvoll die Datenbank anzupassen, zu ändern? Ich denke da an Updates. Aber durch ein Update werden Gruppenzughörigkeiten ja nicht überschrieben

    Was genau möchtest du denn auf der Datenbank anpassen / ändern?

    - macht es vielleicht mehr Sinn die Gruppen durch Datenbankänderungen via Skript einzupflegen, aber dann bleibt die händische Anpassung der User

    Händische Anpassung der User?

  • hmm mein Vorschlag wäre ein Plugin / Cronjob welche die Berechtigungen / AD Gruppen synchronisiert:


    Selber auf der Datenbank würde ich nichts machen nimm einfach die Methoden von Joomla z.B. UserHelper: addUserToGroup getUserGroups removeUserFromGroup setUserGroups oder vom UserGroups Model wo Joomla Gruppen anlegt.

    OK, schaue mir die Methoden mal genauer an ...

    Was ist genau mit "Group Mapping" gemeint?

    Dort werden die einzelnen Gruppen aus dem AD mit den Joomla Gruppen "verknüpft"... zur besseren Verständlichkeit hier der Screenshot der englischen Erklärung...


    Was genau möchtest du denn auf der Datenbank anpassen / ändern?

    Die Zuordnung User zu Gruppen nicht über die Group Maps zu händeln, sondern quasi direkt in der Datenbank ... es gibt ja in der Datenbank die Tabelle "_users", "_user_usergroup_map" und "_usergroups". Um die korrekte Verknüpfung hinzukriegen muss ich doch wahrscheinlich in allen drei Tabellen Änderungen vornehmen ... vielleicht noch mehr Tabellen, so genau habe ich mir das noch nicht angeschaut, aber je mehr ich darüber nachdenke, desto unsinniger wird es, irgendwas in der DB zu machen. Wenn es dann knallt is´kaputt ...


    Händische Anpassung der User?

    naja, ausschließlich die Gruppen aus dem AD in die DB zu schreiben, ohne die Zuordnung bei den Usern vorzunehmen. Das müsste man dann per Hand nachholen. Aber dann kann ich genauso gut alles per Hand machen...


    Ich schau mir erstmal deinen ersten Vorschlag an ... danke zero24

  • Die Zuordnung User zu Gruppen nicht über die Group Maps zu händeln

    Dafür sind die genannten Methoden die richtigen. Bitte nicht direkt per SQL machen :)


    ausschließlich die Gruppen aus dem AD in die DB zu schreiben

    Du hast doch ein Script welches dir die Gruppen ausgibt? Mach doch als nächsten Schritt die Erstellung dieser Gruppen in Joomla dadurch kannst du das Thema auch automatisieren und musst dir bei Änderungen keine Gedanken machen. :)


    Dort werden die einzelnen Gruppen aus dem AD mit den Joomla Gruppen "verknüpft"... zur besseren Verständlichkeit hier der Screenshot der englischen Erklärung...

    Naja das kann man machen muss man aber ja nicht. Wenn eh alles per Script läuft also Gruppen anlegen etc dann kannst du das ja auch machen indem du den technisch eindeutigen Namen der AD Gruppe als Titel der Gruppe benutzt und dann in deinem Script über dieses Feld gehst und nicht die ID. Wenn das nicht geht dann wirst du um ein mapping nicht herum kommen. Kannst du aber ja auch automatisieren indem du wenn dein Script die Gruppe anlegt du dir die ID der Joomla Gruppe mit der AD Gruppe ablegst in ner eigenen Tabelle oder so. Aber nicht manuell gepflegt sondern automatisch beim anlegen.

  • Mit der Lösung ist das so eine Sache ... searchfie

    Ich verzweifle am Mapping. Egal was ich einstelle, werden die Einstellungen "ignoriert". Ein neuer User, der sich anmeldet wird in Joomla angelegt und der Gruppe "Registered" zugeordnet. Entweder verstehe ich das mit dem Mapping falsch oder es grätscht mir noch irgendwo ein Plugin dazwischen, dass die User in die Gruppe "schiebt", was aber ja gar nicht passieren soll. Oder doch???hmm Ich dachte das Joomla via LDAP im AD die Gruppen "nachschaut" (ohne die Gruppen ins CMS zu importieren) und je nach Zugehörigkeit (via Mapping) die Rechte "vergibt" ... Leider geben die Dokumentationen über das Mapping nicht mehr so viel her...

    Ich möchte eigentlich keine Gruppen zu Joomla importieren, denn dann hat/hätte man wieder eine Stelle was zu pflegen...

    Wir haben im AD über 200 Rechte-Gruppen, die ich mit der Mapping-List verknüpfen wollte. Die Gruppen ähneln sich alle sehr stark vom Aufbau, deshalb mal nur einen Eintrag aus der Liste:

    CN=VERW-XXX-EDV,OU=VERW-Gruppen,OU=VERW,OU=DOMAIN.DE,DC=DOMAIN,DC=tld:2,81,97,52

    Mache ich einen Denkfehler oder ist der Eintrag falsch?

  • Ein neuer User, der sich anmeldet wird in Joomla angelegt und der Gruppe "Registered" zugeordnet.

    CN=VERW-XXX-EDV,OU=VERW-Gruppen,OU=VERW,OU=DOMAIN.DE,DC=DOMAIN,DC=tld:2,81,97,52

    Mache ich einen Denkfehler oder ist der Eintrag falsch?

    hmm in nem Standard Joomla ist doch die ID 2 "Registered"


    Ggf. wir nur ein Mapping pro Zeile unterstützt?

  • Ja, sorry, die ID für "Registered" ist 2, das ist auch korrekt, aber der User wird ausschließlich dieser Gruppe zugeordnet. in der Doku steht, dass man mehrere Group-ID´s mit Komma getrennt hinzufügen kann. Pro AD-Gruppe eine Zeile. Für mich ist noch nicht ganz klar, wie die Information beim User gespeichert wird, in welchen Gruppen er/sie/divers (divers soll keinesfalls diskriminierend dort stehen, sondern die Gleichbehandlung symbolisieren) ist. Wenn ich mir die Datenbank anschaue funktioniert das Plugin vielleicht nicht/nicht richtig. Eigentlich sollte in der Tabelle ##_users unter params der Eintrag

    Code
    "auth_type":"LDAP","auth_domain":"DOMAIN_CONTROLLER","admin_style":"","admin_language":"","language":"","editor":"","timezone":""}

    stehen. Meldet sich ein neuer User, der im AD mit Gruppenzugehörigkeit angelegt ist, an, so steht dann in der Tabelle unter "params" aber

    Code
    {"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}

    Gehe ich dann per BE auf den User und klicke auf "Speichern und Schließen" ist der Eintrag wie oben ... fie

    Schaue ich mir die ##_usergroup_map-Tabelle an, so sind dort keine Einträge hinzugefügt, die eigentlich dort stehen müssten, da der User die Gruppen im AD hat.


    Vor lauter Verzweifelung habe ich mir die Doku von der shmanic-Seite von archive.org gezogen und ausgedruckt, aber damit komme ich nicht weiter... ich habe auch die 200+ Gruppen aus dem Mapping entfernt und nur die eine Gruppe in eingefügt, in die der User im AD vorhanden ist (es ist die oben gepostete). Dennoch bekommt der User nur "Registered" zugeordnet.

    Im Mapping-Plugin kann man noch auswählen in welche Gruppe der User beim "Start" hinzugefügt werden soll. Standardmäßig steht sie auf "Registered", habe sie auch mal auf die Gruppe gesetzt, die in der Zuordnung/im Mapping steht, in die der User eigentlich rein soll, aber dennoch kommt der User immer in "Registered".


    Ich habe auch schon recherchiert, ob ich Shawn Maunder (der hat das LDAP Plugin seinerzeit realisiert) direkt anschreibe, aber selbst bei GitHub ist er seit längerem nicht mehr aktiv...


    Dennoch bleibe ich am Ball! Jeder Tipp ist Willkommen! :love:<3:!:

  • hmm dann wird es jetzt schwer möglicherweise handelt es sich da um ein Bug im System. Vielleicht funktioniert es jetzt mit 3.x nicht mehr, würde mich wundern aber kann man nicht ausschließen. Dazu müsste man aber tiefer ins Plugin einteigen und Debuggen was genau da passiert bzw. was da nicht passiert und warum.

  • Soooo ... wo Schatten ist, ist auch Licht ... zumindest wird es bei mir zu dem Thema immer heller ... dancevain

    Es hat zwar gefühlt ewig gedauert, aber nun weiß ich zumindest wo der Fehler liegt: Das joomlaeigene LDAP Plugin bekommt zwar die Synchronisierung hin, aber beherrscht kein Group Mapping. Für das Mapping muss das "Authentication User-Adapter"-Plugin in Kombination mit dem "LDAP - Group-Mapping"- und "LDAP - User Creation"-Plugin aktiviert und konfiguriert werden. Durch das ganze hin und her ist mir schlichtweg entgangen, dass das "Authentication User-Adapter"-Plugin ein anderes ist als "Authentifizierung LDAP", bzw. die Kombination der Plugins entscheidend ist. Wenn sich nun ein neuer Benutzer authentifiziert wird dieser in Joomla angelegt und bekommt wird auch den Gruppen zugewiesen, die über das Mapping eingestellt sind.

    Ich schließe das Thema erstmal, da mein Problem gelöst ist. Sollte ich aber dennoch neue wichtige Erkenntnisse gewinnen, werde ich es an dieser Stelle posten.


    Danke noch mal zero24 für deine Unterstützung! :thumbup: