====== Admidio Provisioning-Plugin — Konten und Gruppen anderer Systeme mit Admidio abgleichen ====== {{admidioplugins>info}} ==== Beschreibung ==== Dieses Plugin legt Benutzerkonten und Gruppen auf externen Systemen an, aktualisiert, deaktiviert und löscht sie entsprechend den Mitgliedern und Rollen von Admidio. Änderungen in Admidio erreichen die angebundenen Systeme innerhalb von Sekunden. Das Plugin bringt drei Konnektoren mit: * **SCIM 2.0**, der Standard für die Benutzerprovisionierung; * **Nextcloud** über die OCS-Provisioning-API: Benutzer, ihre Profildaten, Aktivierungsstatus und Gruppen; * **Mailman 3** über die REST-API: Rollen werden zu Mailinglisten, ihre Mitglieder werden mit ihrer E-Mail-Adresse angemeldet. Weitere Konnektoren können von anderen Plugins ergänzt werden. ==== Downloads ==== {{admidioplugins>releases}} ==== Installation ==== Gehe als Administrator zum Plugin-Manager von Admidio (Admidio 6.0 oder neuer und PHP 8.2 oder neuer erforderlich, PHP-Erweiterung ''curl'' nötig), wähle „Plugin hinzufügen“, lade die Plugin-ZIP-Datei hoch und aktiviere das Plugin. Die Datenbanktabellen des Plugins werden bei der Installation angelegt. Beim Entfernen des Plugins werden sie gelöscht, einschließlich der Zuordnung, welches Konto auf dem Zielsystem zu welchem Admidio-Benutzer gehört -- trenne daher vorher die Ziele oder räume sie auf. === Cron === Änderungen in Admidio erreichen die Ziele am Ende der Anfrage, die sie ausgelöst hat. Beginn und Ende von Mitgliedschaften, die Admidio nur als ganze Tage kennt, werden mit dem täglichen Abgleich kurz nach Mitternacht wirksam. Lasse die Wartungsaufträge von Admidio stündlich laufen, eine Zeile je Organisation; das Plugin registriert dort seinen Auftrag ''provisioning:sync'': 15 * * * * php /pfad/zu/admidio/admidio maintenance:run --organization=KURZNAME --no-interaction --quiet Der Befehl benötigt einen ausführenden Administrator der Organisation, zum Beispiel über ''$gCliDefaults'' in ''adm_my_files/cli-config.php''. Ohne Cron startet der erste Seitenaufruf nach Mitternacht den Abgleich; beendete Mitgliedschaften bleiben dann auf dem Ziel aktiv, bis jemand Admidio öffnet. ==== Konfiguration ==== Der Menüpunkt **Provisionierung** (unter //Erweiterungen//, für Administratoren sichtbar) listet die Ziele auf. Ein Ziel besteht aus * einer **Verbindung** (bei SCIM: Basis-URL, Bearer-Token, OAuth-2.0-Client-Zugangsdaten oder HTTP Basic); * seinen **Benutzern**: alle Mitglieder der Organisation, die Mitglieder ausgewählter Rollen oder -- wenn das Ziel mit einem SSO-Client verknüpft ist -- alle, die sich an diesem Client anmelden dürfen; * dem **Kontonamen** (SCIM ''userName'') und den **Attributen**, die aus Profilfeldern übernommen werden; * **Gruppen**: auf dem Ziel konfiguriert (Mitglieder oder Leiter von Rollen), aus der Rollenzuordnung des verknüpften SSO-Clients übernommen und optional eine Gruppe für jede weitere Rolle; * einem **Prüfplan**, der das Zielsystem mit Admidio vergleicht. Die Statusseite eines Ziels zeigt die Warteschlange, die letzten Läufe sowie jedes Konto und jede Gruppe, die Aufmerksamkeit braucht, und bietet //Jetzt synchronisieren//, //Jetzt prüfen//, //Verbindung testen// und //Wiederholen//. === Hinweise zu den Konnektoren === * **Nextcloud:** Der Kontoname ist die Nextcloud-Benutzer-ID und kann nach dem Anlegen des Kontos nicht mehr geändert werden. Ein bestehender Benutzer mit dieser ID wird übernommen. Neue Benutzer erhalten kein Passwort; Nextcloud schickt ihnen einen Link zum Festlegen, sie brauchen daher eine E-Mail-Adresse. Verwende zur Anmeldung ein App-Passwort eines Administrators. Seit Nextcloud 35 müssen Änderungen an Benutzern, Gruppen und Mitgliedschaften mit einem Passwort bestätigt werden. Ein App-Passwort genügt dafür standardmäßig nicht mehr, kann aber von bestimmten IP-Adressen aus zugelassen werden: Trage die Adresse des Admidio-Servers in ''allowed_no_password_confirmation_ranges'' in der ''config.php'' von Nextcloud ein (hinter einem Reverse-Proxy muss auch der Proxy in ''trusted_proxies'' stehen): 'allowed_no_password_confirmation_ranges' => ['192.0.2.10/32'], * **Mailman 3:** Der Kontoname ist standardmäßig die E-Mail-Adresse, Benutzer ohne E-Mail-Adresse werden daher nicht angemeldet. Ein Gruppenname ist die Adresse der Liste oder ihr lokaler Teil zusammen mit der Mail-Domain des Ziels. Listen werden nur angelegt und gelöscht, wenn das Ziel es erlaubt; andernfalls verliert eine entfernte Gruppe nur die von Admidio angelegten Anmeldungen. Eine geänderte E-Mail-Adresse überträgt die Anmeldung. * **SCIM:** Für Dienste, die vom Standard abweichen, kann ein Ziel vollständige Ressourcen senden (PUT statt PATCH), ohne Gruppen arbeiten, Konten löschen statt deaktivieren und die OAuth-Client-Zugangsdaten im Anfragekörper oder als HTTP-Basic-Zugangsdaten senden. ==== Was angefasst wird und was nicht ==== * Mitglieder einer Gruppe erhalten immer ein Konto. Benutzer ohne Wert für den Kontonamen werden nicht provisioniert. * Ein Benutzer, der nicht mehr zu einem Ziel gehört, wird aus dessen Gruppen entfernt und deaktiviert; nur ein in Admidio gelöschter Benutzer wird auch auf dem Ziel gelöscht. * Konten und Gruppen, die das Plugin nicht angelegt oder übernommen hat (zugeordnet über ''externalId''), werden nie angefasst. * Admidio löscht nur, was es selbst angelegt hat. Ein Konto oder eine Gruppe, die auf dem Ziel schon existierte und übernommen wurde, wird nie gelöscht; es werden nur die von Admidio hinzugefügten Mitgliedschaften zurückgenommen. Mitglieder, die eine Gruppe vor der Übernahme hatte, werden nie entfernt. === Ein Ziel entfernen === * **Trennen** entfernt das Ziel in Admidio. Seine Konten und Gruppen auf dem Zielsystem bleiben bestehen. * **Deprovisionieren** löscht die Gruppen und dann die Konten, die Admidio auf dem Zielsystem angelegt hat, und entfernt danach das Ziel. Die Löschungen laufen über die Warteschlange und überstehen daher Unterbrechungen; ein Eintrag, den das Ziel ablehnt, hält das Ziel in der Liste, bis er wiederholt oder das Ziel getrennt wird. ==== Einstellungen ==== **Administration → Einstellungen → Anmeldung & Sicherheit → Provisionierung** ^ Einstellung ^ Standard ^ Bedeutung ^ | Sekunden pro Seitenaufruf für die Synchronisierung | 5 | Nach einer Änderung werden die Ziele nach dem Ausliefern der Seite höchstens so viele Sekunden lang aktualisiert. 0 überlässt die Synchronisierung Cron. | | Ziele in privaten Netzwerken erlauben | aus | Erlaubt Zielsysteme mit privaten oder reservierten IP-Adressen und unverschlüsseltes HTTP. Nur einschalten, wenn das Zielsystem im eigenen Netzwerk liegt. | | Administratoren über Probleme benachrichtigen | an | Sendet den Administratoren der Organisation höchstens eine E-Mail je Ziel und Tag, wenn Konten oder Gruppen Aufmerksamkeit brauchen. | ==== Kommandozeile ==== ^ Befehl ^ Zweck ^ | ''provisioning:sync [--target=UUID] [--full] [--verify] [--budget=S] [--dry-run]'' | Fälliges ausführen (für Cron) | | ''provisioning:status'' | Ziele, Warteschlangen und letzte Läufe; Exit-Code 3, wenn ein Ziel pausiert ist oder Einträge Aufmerksamkeit brauchen | | ''provisioning:test --target=UUID'' | Verbindung testen | | ''provisioning:queue --target=UUID [--retry] [--clear --yes]'' | Einträge, die Aufmerksamkeit brauchen; wiederholen oder löschen | | ''provisioning:deprovision --target=UUID --yes'' | Löscht, was Admidio auf dem Zielsystem angelegt hat, und danach das Ziel | ==== Für Entwickler ==== Ein Konnektor erweitert ''AdmidioPlugin\Provisioning\Connector\Connector'' und wird über den Filter ''provisioning_connectors'' registriert. Ein vollständiges Beispiel und einen kleinen SCIM-Mock-Server zum Ausprobieren findest du im [[https://github.com/kainhofer/admidio-provisioning/|Quellcode]].