Sie befinden sich hier: start » de » Interne Dokumentation » DokuWiki-Erweiterungen (WvdS) » Abgelöste Pakete und alte Seiten-Kennungen » WvdS.DokuWiki.Entra Plugin

WvdS.DokuWiki.Entra Plugin

Plugin: wvdsentra
Version: 1.0.0 (Phase 1)
Namespace: lib/plugins/wvdsentra/
Typ: Authentifizierungs-Backend (authtype)
Autor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Lizenz: GPL 2


Status: Phase 1 umgesetzt und lokal verifiziert, aber noch nicht scharfgeschaltet ($conf['authtype'] steht weiterhin auf authplain). Zum Aktivieren die Verbindungsdaten konfigurieren und authtype auf wvdsentra umstellen — vorher den Login-Simulator in der Admin-UI nutzen, um Aussperrung zu vermeiden.

Definition

Das wvdsentra Plugin authentifiziert DokuWiki-Benutzer gegen Entra ID / Azure AD in Hybrid-Umgebungen (On-Prem AD oder Azure AD DS mit erreichbarem LDAP) und hält die IdP-Gruppenmitgliedschaft mit den DokuWiki-ACL-Gruppen zur Laufzeit synchron.

Es erweitert das gebündelte authad-Backend und ändert daran nur zwei Dinge:

  • Gruppen-Remapping — rohe AD-Gruppen werden über eine konfigurierbare Tabelle auf

DokuWiki-Gruppen (@user/@wvds/@wvdse/@admin) abgebildet.

  • Break-Glass-Fallback — konfigurierte lokale Konten werden gegen conf/users.auth.php

geprüft, auch bei AD-Ausfall (Schutz vor Total-Aussperrung).

Die gesamte adLDAP-/memberOf-/SSO-Mechanik stammt unverändert von authad.

Funktionsprinzip (Runtime-Claims-Modell)

  • Entra/AD ist Quelle der Wahrheit für Identität + Gruppenmitgliedschaft.
  • acl.auth.php bleibt handgepflegte Quelle der Wahrheit dafür, was jede Gruppe darf.
  • Bei jedem Login schreibt das Plugin die gemappten DokuWiki-Gruppen in $USERINFO['grps'].

Dieselbe eine Injektion steuert Kern-ACL, <ifgroup> (wvdscond) und wkacmenu.

  • Es wird niemals in acl.auth.php oder users.auth.php geschrieben — keine Drift,

kein Cron-Job.

Anwendungsfaelle

  • Zentrale Zugriffssteuerung — AD-Gruppen bestimmen die Wiki-Berechtigung; neue Mitarbeiter

erhalten Zugriff automatisch über ihre AD-Mitgliedschaft.

  • Hybrid-SSO — Formular-Login gegen AD, optional echtes Windows-SSO über IIS Integrated

Windows Authentication (sso=1, REMOTE_USER) auf domänen-/Azure-AD-DS-gejointem Host.

  • KRITIS/NIS2-konforme Rechtevergabe — Autorisierung bleibt nachvollziehbar in der

handgepflegten ACL; Identität kommt aus dem zentralen, gehärteten Verzeichnis.


Aktivierung

// conf/local.php
$conf['authtype'] = 'wvdsentra';
$conf['plugin']['wvdsentra']['base_dn']            = 'DC=corp,DC=example,DC=org';
$conf['plugin']['wvdsentra']['domain_controllers'] = 'dc01.corp.example.org';
$conf['plugin']['wvdsentra']['use_ssl']            = 1;      // LDAPS (empfohlen)
$conf['plugin']['wvdsentra']['account_suffix']     = '@corp.example.org';
$conf['plugin']['wvdsentra']['local_fallback_users'] = 'zpetrusic,wvdsverify'; // Break-Glass-Admins
// Optional echtes Windows-SSO (domaenen-gejointer IIS-Host):
// $conf['plugin']['wvdsentra']['sso'] = 1;

Die Gruppen-Abbildung wird nicht hier, sondern in der Admin-UI gepflegt (Ablage conf/wvdsentra.json).


Gruppen-Mapping

Die Abbildung bildet rohe IdP-Gruppennamen (case-insensitiv) auf DokuWiki-Gruppen ab.

Modus Verhalten
Whitelist an Nur explizit gemappte Gruppen werden übernommen (Rauschen wird verworfen)
Whitelist aus Nicht gemappte Gruppen werden unter ihrem normalisierten Rohnamen übernommen
  • Die Standardgruppe (Default: user) wird immer ergänzt, sodass jeder authentifizierte

Nutzer mindestens die Basis-Leserolle erhält.

  • GUID-Schlüssel (reine Entra-Cloud-Gruppen, Phase 2) werden wie normale Schlüssel behandelt.

Admin-UI

Aufruf: do=admin&page=wvdsentra (nur Superuser). Vier Panels:

Panel Zweck
Übersicht Status-Dashboard: Verbindung (On-Demand-Test), Modus, Mapping-Abdeckung, Break-Glass-Admins, Lockout-Guard
Gruppen-Mapping Editor IdP-Gruppe → DokuWiki-Gruppe, Whitelist-Schalter, Standardgruppe, Live-Validierung, CSRF-gesichertes Speichern
Login-Simulator Read-only Kette roh → Mapping → ACL-Wirkung für einen Benutzer; verändert keine Session
Sicherheit Break-Glass-Konten, Transport-Härtung (LDAPS), Recovery-Anleitung

Login-Simulator

Der Simulator ist das zentrale Werkzeug, um eine Abbildung vor dem Scharfschalten zu prüfen: Er zeigt für einen Testbenutzer die rohen IdP-Gruppen, die daraus abgeleiteten DokuWiki-Gruppen und die resultierende ACL-Wirkung (NONE/READ/EDIT/UPLOAD/ADMIN) an repräsentativen Namespaces — gegen die derzeit aktive acl.auth.php, ohne die Session zu verändern.


Sicherheit

  • Aussperr-Schutz — Break-Glass-Fallback plus Lockout-Guard (warnt, wenn keine Regel auf eine

Superuser-Gruppe mappt). Recovery: authtype temporär auf authplain.

  • Transport — LDAPS/StartTLS erzwingen; Service-Bind-Passwort nur in local.php/Vault,

nie im Output (CWE-319).

  • CSRF — jeder Schreibpfad prüft checkSecurityToken() (CWE-352).
  • XSS — alle IdP-/Nutzer-Werte via hsc() bzw. clientseitigem Escaping (CWE-79).
  • Least Privilege — Admin-UI und AJAX-Endpunkte sind superuser-only (auth_isadmin()).

Design-System-Tokens

Die Admin-UI ist unter .wk-entra gescopet und färbt sich über den WvdS-Styles-Contract ein. Jeder –we-*-Token konsumiert einen Contract-Token mit Fluent-getöntem Literal als Fallback, sodass die UI auch im Stock-dokuwiki-Template professionell aussieht. Vollständige Tabelle: siehe lib/plugins/wvdsentra/README.md und Styles-Contract (--wk-*).


Ausbaustufen

Phase Inhalt Status
Phase 1 LDAP-Front + Gruppen-Remapping + Break-Glass + Admin-UI + Login-Simulator Umgesetzt
Phase 2 OIDC-Browser-SSO gegen Entra (Auth-Code+PKCE, App-Roles/Graph-Overage) über trustExternal(), nutzt denselben GroupMapper Geplant (Spike)
Phase 3 Provisioning-Mirror (Graph /users → SQLite), nur falls Offline-User-Listing nötig Optional

Voraussetzungen

  • PHP-ldap-Erweiterung (im IIS-PHP geprüft: vorhanden in C:\PHP\8.3).
  • Erreichbarer LDAP(S)-Endpunkt zu On-Prem AD oder Azure AD DS.
  • Phase 2 (OIDC) zusätzlich: stabile HTTPS-Redirect-URI und eine JWT-Bibliothek.

Versionshinweise

Version Datum Aenderungen
1.0.0 (Phase 1) 2026-07-05 Erstveröffentlichung: LDAP-Front, Gruppen-Remapping, Break-Glass-Fallback, Admin-UI mit Login-Simulator

Siehe auch


Technische Referenz

Klasse: auth_plugin_wvdsentra

Datei: lib/plugins/wvdsentra/auth.php (extends auth_plugin_authad)

Methode Beschreibung
getUserData() Holt authad-Info und bildet die rohen Gruppen über den GroupMapper auf DokuWiki-Gruppen ab
checkPass() Break-Glass-Logins gegen authplain, sonst AD-Bind der Elternklasse
isCaseSensitive() Gibt false zurück (AD-Benutzernamen sind case-insensitiv)
simulateMapping() Read-only Roh→Mapping-Diagnose für den Login-Simulator
testConnection() On-Demand-LDAP-Verbindungstest für die Admin-UI

Klasse: GroupMapper

Datei: lib/plugins/wvdsentra/GroupMapper.php

Methode Beschreibung
map($rawGroups) Bildet rohe IdP-Gruppen auf DokuWiki-Gruppen ab (Whitelist, Default, Dedup)
explain($rawGroups) Diagnose (getroffen/verworfen/durchgereicht) für den Simulator

Klasse: MappingStore

Datei: lib/plugins/wvdsentra/MappingStore.php

Methode Beschreibung
load() Lädt/validiert die Abbildung aus conf/wvdsentra.json (Defaults bei Fehlen/Korruption)
save($data) Atomarer Write mit .bak-Backup
mapper() Erzeugt einen einsatzbereiten GroupMapper aus dem gespeicherten Zustand

<wk:audit stack=„doku“ title=„wvdsentra Plugin“>

<wk:include ref="code:qualitaet" critical="true">[x][x][x][x]</wk:include>
<wk:include ref="stacks:dokuwiki-php">[x][x][x][x][x]</wk:include>
<wk:include ref="sicherheit:kritis" critical="true">[x][x][x][x][x]</wk:include>

</wk:audit>

DISCUSSION

de/wiki/dwe/legacy/wvdsentra.txt · Zuletzt geändert: von 0.0.0.0