Vtičnik WvdS.DokuWiki.Entra
Vtičnik: wvdsentra
Različica: 1.0.0 (faza 1)
Imenski prostor: lib/plugins/wvdsentra/
Vrsta: zaledje za overjanje (authtype)
Avtor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Licenca: GPL 2
$conf['authtype'] je še vedno authplain). Za vklop nastavite povezavo in preklopite
authtype na wvdsentra — pred tem uporabite simulator prijave v skrbniškem vmesniku,
da se izognete zaklepu dostopa.
Opis
Vtičnik wvdsentra overja uporabnike DokuWiki proti Entra ID / Azure AD v hibridnih okoljih (lokalni AD ali Azure AD DS z dosegljivim vmesnikom LDAP) in ohranja članstvo v skupinah iz ponudnika identitete usklajeno s skupinami DokuWiki ACL med izvajanjem.
Razširja priloženo zaledje authad in spreminja le dvoje:
- Preslikava skupin — surove skupine AD se prek nastavljive tabele preslikajo v skupine
DokuWiki (@user/@wvds/@wvdse/@admin).
- Zasilni dostop (break-glass) — nastavljeni lokalni računi se preverijo proti
conf/users.auth.php tudi ob nedosegljivem AD (zaščita pred popolnim zaklepom).
Celotna mehanika adLDAP/memberOf/SSO je nespremenjena prevzeta iz authad.
Način delovanja (razrešitev skupin ob prijavi)
- Entra/AD je vir resnice za identiteto in članstvo v skupinah.
acl.auth.phpostaja ročno vzdrževani vir resnice za to, kaj sme posamezna skupina.- Ob vsaki prijavi vtičnik zapiše preslikane skupine DokuWiki v
$USERINFO['grps']; ta enkratni
vnos usmerja jedrni ACL, <ifgroup> (wvdscond) in wkacmenu.
- Nikoli ne piše v
acl.auth.phpaliusers.auth.php— brez razhajanja, brez opravila cron.
Primeri uporabe
- Osrednji nadzor dostopa — skupine AD določajo pravice v wikiju; novi zaposleni samodejno
dobijo dostop prek svojega članstva v AD.
- Hibridni SSO — prijava prek obrazca proti AD, po želji pravi Windows SSO prek IIS Integrated
Windows Authentication (sso=1, REMOTE_USER) na gostitelju, včlanjenem v domeno/Azure AD DS.
- Dodeljevanje pravic skladno s KRITIS/NIS2 — avtorizacija ostaja sledljiva v ročno
vzdrževanem ACL; identiteta prihaja iz osrednjega, utrjenega imenika.
Aktivacija
// 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 (priporočeno) $conf['plugin']['wvdsentra']['account_suffix'] = '@corp.example.org'; $conf['plugin']['wvdsentra']['local_fallback_users'] = 'zpetrusic,wvdsverify'; // zasilni skrbniki // Neobvezno pravi SSO Windows (gostitelj IIS, včlanjen v domeno): // $conf['plugin']['wvdsentra']['sso'] = 1;
Preslikavo skupin upravljate v skrbniškem vmesniku (shranjeno v conf/wvdsentra.json), ne tukaj.
Preslikava skupin
Preslikava preslika surova imena skupin ponudnika identitete (neobčutljivo na velike/male črke) v skupine DokuWiki.
| Način | Obnašanje |
|---|---|
| Beli seznam vklopljen | Prevzamejo se le izrecno preslikane skupine (šum se zavrže) |
| Beli seznam izklopljen | Nepreslikane skupine se prevzamejo pod svojim normaliziranim surovim imenom |
- Privzeta skupina (privzeto:
user) se vedno doda, tako da vsak overjeni uporabnik dobi
vsaj osnovno vlogo bralca.
- Ključi GUID (čiste oblačne skupine Entra, faza 2) se obravnavajo kot navadni ključi.
Skrbniški vmesnik
Odprite do=admin&page=wvdsentra (samo za nadskrbnika). Štiri plošče:
| Plošča | Namen |
|---|---|
| Pregled | Nadzorna plošča stanja: povezava (preizkus na zahtevo), način, pokritost preslikave, zasilni skrbniki, varovalo pred zaklepom |
| Preslikava skupin | Urejevalnik ponudnik identitete → skupina DokuWiki, stikalo belega seznama, privzeta skupina, sprotno preverjanje, shranjevanje, zaščiteno s CSRF |
| Simulator prijave | Le za branje: veriga surovo → preslikava → učinek ACL za uporabnika; ne spreminja seje |
| Varnost | Zasilni računi, utrjevanje prenosa (LDAPS), navodila za obnovitev |
Simulator prijave
Simulator je osrednje orodje za preverjanje preslikave pred vklopom: za testnega uporabnika
prikaže surove skupine ponudnika identitete, iz njih izpeljane skupine DokuWiki in nastali učinek
ACL (NONE/READ/EDIT/UPLOAD/ADMIN) na reprezentativnih imenskih prostorih — glede na trenutno
aktiven acl.auth.php, brez spreminjanja seje.
Varnost
- Zaščita pred zaklepom — zasilni dostop in varovalo, ki opozori, kadar nobeno pravilo ne
preslika v skupino nadskrbnika. Obnovitev: začasno nastavite authtype na authplain.
- Prenos — vsilite LDAPS/StartTLS; geslo storitvenega računa le v
local.php/trezorju, nikoli v izpisu (CWE-319). - CSRF — vsaka pisalna pot preveri
checkSecurityToken()(CWE-352). - XSS — vse vrednosti iz ponudnika identitete oziroma od uporabnika so ubežene z
hsc()oziroma na strani odjemalca (CWE-79). - Najmanjše pravice — skrbniški vmesnik in končne točke AJAX so na voljo le nadskrbniku (
auth_isadmin()).
Žetoni oblikovnega sistema
Skrbniški vmesnik je omejen pod .wk-entra in barve prevzame iz pogodbe o slogih WvdS. Vsak
žeton –we-* uporabi žeton pogodbe z barvno vrednostjo v slogu Fluent kot rezervo, zato je
vmesnik videti profesionalen tudi pri osnovni predlogi dokuwiki. Popolna tabela: glejte
lib/plugins/wvdsentra/README.md in Styles Contract (--wk-*).
Načrt razvoja
| Faza | Vsebina | Stanje |
|---|---|---|
| Faza 1 | Zaledje LDAP + preslikava skupin + zasilni dostop + skrbniški vmesnik + simulator prijave | Izvedeno |
| Faza 2 | SSO prek brskalnika z OIDC proti Entra (auth-code + PKCE, vloge aplikacije / prekoračitev prek Graph) prek trustExternal(), z istim GroupMapper | Načrtovano (spike) |
| Faza 3 | Zrcaljenje uporabnikov (Graph /users → SQLite), le če je potreben izpis uporabnikov brez povezave | Neobvezno |
Predpogoji
- Razširitev PHP
ldap(preverjeno prisotna v IIS PHP:C:\PHP\8.3). - Dosegljiva končna točka LDAP(S) do lokalnega AD ali Azure AD DS.
- Faza 2 (OIDC) dodatno potrebuje stabilen preusmeritveni URI HTTPS in knjižnico JWT.
Opombe o različici
| Različica | Datum | Spremembe |
|---|---|---|
| 1.0.0 (faza 1) | 2026-07-05 | Prva izdaja: zaledje LDAP, preslikava skupin, zasilni dostop, skrbniški vmesnik s simulatorjem prijave |
Glejte tudi
- wkacmenu — meni harmonika, ki upošteva ACL, filtrira po berljivosti
- Styles Contract (--wk-*) — zavezujoči žetoni oblikovanja
–wk-*
Tehnična referenca
Razred: auth_plugin_wvdsentra
Datoteka: lib/plugins/wvdsentra/auth.php (razširja auth_plugin_authad)
| Metoda | Opis |
|---|---|
getUserData() | Pridobi podatke authad in preslika surove skupine v skupine DokuWiki prek GroupMapper |
checkPass() | Zasilne prijave proti authplain, sicer AD-vez starševskega razreda |
isCaseSensitive() | Vrne false (uporabniška imena AD niso občutljiva na velike/male črke) |
simulateMapping() | Diagnostika surovo→preslikava samo za branje za simulator prijave |
testConnection() | Preizkus povezave LDAP na zahtevo za skrbniški vmesnik |
Razred: GroupMapper
Datoteka: lib/plugins/wvdsentra/GroupMapper.php
| Metoda | Opis |
|---|---|
map($rawGroups) | Preslika surove skupine ponudnika identitete v skupine DokuWiki (beli seznam, privzeto, odstranjevanje podvojitev) |
explain($rawGroups) | Diagnostika (zadeto/zavrženo/posredovano) za simulator |
Razred: MappingStore
Datoteka: lib/plugins/wvdsentra/MappingStore.php
| Metoda | Opis |
|---|---|
load() | Naloži/preveri preslikavo iz conf/wvdsentra.json (privzete vrednosti ob manjkajoči/pokvarjeni datoteki) |
save($data) | Atomarni zapis z varnostno kopijo .bak |
mapper() | Iz shranjenega stanja izdela pripravljen GroupMapper |
<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