Tehnična referenca
Priročnik za wkidentity: shranjevanje na datotečnem sistemu, skrbniška plošča, nastavitve in razredi. Zakaj so stvari tako zgrajene, piše v Konceptih; kaj želite narediti, na Identity.
Paket: wkidentity · Različica: 1.0.0 · Mesto: lib/plugins/wkidentity/
Vrsta: vtičnik action in helper — brez authtype, brez oznake syntax
Avtor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs) · Licenca: GPL 2
Shranjevanje: izključno datotečno, brez baze podatkov
Ne obstaja nikakršna integracija SQLite/DB. Natanko ena datoteka na uporabnika:
data/meta/wkidentity/<login>.secret
- Vsebina: majhna ovojnica JSON —
{„method“:„totp“,„secret“:„BASE32…“}ali
{„method“:„email“} — kot celota šifrirana AES z lastnima funkcijama jedra
''auth_encrypt()''/''auth_decrypt()'' (''inc/auth.php''), enak mehanizem, kot ga jedro
uporablja za piškotek "ostani prijavljen". Ovojnica (namesto golega niza skrivnosti) je to,
kar sploh omogoča identifikator metode po uporabniku.
* Izpeljava ključa: ''hash_hmac('sha256', 'wkidentity-secret-at-rest-v1', auth_cookiesalt())'' —
ista namestitvena sol piškotka kot pri jedrnem piškotku, vendar s fiksno kontekstno oznako,
tako da se isto ključno gradivo kot pri funkciji piškotka nikoli ne ponovno uporabi.
* ''isEnrolled()'' preveri le ''file_exists()'' — brez indeksa, brez predpomnilnika, brez datoteke registra.
* Čakajoča skrivnost TOTP med potrditvijo je izključno v seji PHP (glejte potek dela zgoraj),
nikoli v tej datoteki. Koda za potrditev po e-pošti je shranjena zgoščena (SHA-256, nikoli v
golem besedilu) v lastni, kratkotrajni datoteki ''data/meta/wkidentity/<login>.emailcode''.
* Skrbniška politika (kateri uporabniki/imenski prostori zahtevajo TOTP) je **ločeno** v
''conf/wkidentity-policy.json'' (glejte skrbniško ploščo spodaj) — brez mešanja podatkov o
vpisu in pravil uveljavljanja.
Skrbniška plošča
Odprite do=admin&page=wkidentity (le nadskrbnik). Vzorec zavihkov Fluent kot pri
wvdsentra (ARIA tablist, vsi paneli ostanejo vidni brez JavaScript):
| Zavihek | Vsebina |
|---|---|
| Pregled | Števci: vpisani po metodi, „zahtevano, a manjka“, število obveznih imenskih prostorov |
| Uporabniki | Seznam vpisanih z gumbom za ponastavitev po vrstici, podpisana globoka povezava v predal za urejanje usermanager, vzdrževanje seznama „TOTP zahtevan“ |
| Imenski prostori | Textarea s predponami imenskih prostorov, ki zahtevajo vpis TOTP/e-pošte |
Trajnost je ločena od Config Managerja DokuWiki, v conf/wkidentity-policy.json
(PolicyStore.php, vzorec 1:1 po zgledu wvdsentra/MappingStore.php: varnostna kopija
.bak pred vsakim prepisom, trdna normalizacija).
Barvna semantika gumbov (od 2026-07-11): Ponastavitev (po vrstici) in „ד za odstranitev
vnosa s seznama „TOTP zahtevan“ sta rdeča (wt-btn–danger, destruktivni dejanji); „Shrani“
(zavihek Imenski prostori) je nevtralen/bel namesto prejšnjega modrega poudarka — noben gumb na
tem panelu ni več samodejno poudarjen glavni CTA. Prejšnji lokalni blok vzdevkov žetonov
–wt-* v admin.css je bil odstranjen; vsako pravilo zdaj neposredno referencira osrednjo
pogodbo –wk-* (podrobnosti:
Contract v3).
Cache-busting za admin.css (od 2026-07-12):
action.php::injectAssets() je doslej povezoval admin.css brez kakršnega koli lomilca
predpomnilnika (brez poizvedbenega niza ?t=… kot pri mehanizmu tseed na ravni
celotnega mesta) — brskalnik, ki je ta URL že enkrat naložil, je po spremembi CSS še vedno
prikazoval staro, predpomnjeno različico, dokler se ni vsililo trdo osveževanje. To je bil
dejanski vzrok prijavljenega „spet modrega gumba namesto belega“ — sam popravek barve je bil že
pravilen, le ni viden dosegel vsakega brskalnika. Popravek: povezava admin.css zdaj nosi
poizvedbeni niz ?t=… na osnovi mtime, enako načelo kot pri tseed na ravni celotnega mesta.
Konfiguracija
Skrbništvo → Nastavitve konfiguracije ($conf['plugin']['wkidentity'][…]):
| Nastavitev | Privzeto | Opis |
|---|---|---|
issuer | '''' (prazno) | Ime izdajatelja v aplikaciji authenticator; prazno = naslov wikija ($conf['title']), sicer povratek na „DokuWiki“ |
show_debug_link | vklopljeno | Prikaži povezavo do interne testne strani v profilu |
digits | 6 | Dolžina kode (6/7/8) |
period | 30 | Trajanje veljavnosti kode v sekundah (30/60) |
window | 1 | Toleranca za odstopanje ure v ± časovnih korakih |
allow_email_method | izklopljeno | Odkleni enkratno kodo po e-pošti kot alternativo aplikaciji authenticator — aktivirajte šele po preverjeni dostavi pošte |
enforce_login | izklopljeno | Uveljavljanje ob prijavi za že vpisane uporabnike — stikalo za zasilni izklop, glejte „Uveljavljanje prijave“ zgoraj |
login_max_attempts | 5 | Neuspeli poskusi na prijavo, preden se zavrže |
login_attempt_window | 600 | Trajanje veljavnosti prijave, ki čaka na drugi faktor, v sekundah |
digits/period iz URI
otpauth:// in vedno računata s 6 števkami / 30 sekundami. Drugačne vrednosti delujejo le z
aplikacijami, ki te parametre dejansko upoštevajo (npr. Aegis, FreeOTP, 2FAS, Bitwarden) — pri
obeh velikih aplikacijah bi bila sicer vsaka koda zavrnjena.
Tehnična referenca
Razred: action_plugin_wkidentity
Datoteka: lib/plugins/wkidentity/action.php
| Kljuka | Namen |
|---|---|
FORM_UPDATEPROFILE_OUTPUT | Vstavi območje 2FA v obrazec profila (vpis prek aplikacije in e-pošte, stanje/onemogočitev) |
ACTION_ACT_PREPROCESS | Obdela wkidentity_action=start|confirm|email_start|email_confirm in wkidentity_disable; prevzame wkidentity_debug in (prek LoginGate) wkidentity_verify |
TPL_ACT_UNKNOWN | Izriše interno testno stran wkidentity_debug ter (prek LoginGate) wkidentity_verify |
TPL_METAHEADER_OUTPUT | Naloži knjižnico QR + pomožne skripte le na pogledih, ki jih potrebujejo |
AUTH_ACL_CHECK | Zavrne branje/pisanje v obveznih imenskih prostorih za nevpisane uporabnike |
ACTION_DENIED_TPLCONTENT | Razlagalno besedilo na strani zavrnitve, kadar blokada izvira iz tega vtičnika |
TPL_CONTENT_DISPLAY | Opozorilni pas na ravni celotnega mesta za „zahtevano, a ni vpisano“ |
AUTH_LOGIN_CHECK | Prenese na LoginGate::gate() |
Razred: helper_plugin_wkidentity
Datoteka: lib/plugins/wkidentity/helper.php
| Metoda | Opis |
|---|---|
generateSecret() | Nova naključna skrivnost (160 bitov, Base32) |
getCode() / verifyCode() | Izračun TOTP oziroma preverjanje s toleranco odstopanja |
buildOtpAuthUri() | URI otpauth:// za kodo QR |
isEnrolled() / method() / loadSecret() / saveSecret() / saveEmailMethod() / removeSecret() | Shranjevanje ovojnice JSON pod data/meta/wkidentity/ |
sendEmailChallenge() / verifyEmailChallenge() | Enkratna koda po e-pošti: pošiljanje, zgoščeno shranjevanje z iztekom, enkratno preverjanje |
Razred: PolicyStore
Datoteka: lib/plugins/wkidentity/PolicyStore.php (imenski prostor dokuwiki\plugin\wkidentity)
| Metoda | Opis |
|---|---|
load() / save() | Naloži/trajno shrani conf/wkidentity-policy.json (vzorec po zgledu wvdsentra/MappingStore.php) |
isUserRequired() | Ali je prijava označena kot „TOTP zahtevan“ (opozorilna opomba) |
isNamespaceRequired() | Ujemanje predpone s seznamom obveznih imenskih prostorov |
Razred: LoginGate
Datoteka: lib/plugins/wkidentity/LoginGate.php (imenski prostor dokuwiki\plugin\wkidentity)
| Metoda | Opis |
|---|---|
gate() | Obravnavalec AUTH_LOGIN_CHECK: lastno preverjanje gesla, ustavi vpisane uporabnike pred dokončanjem seje |
renderVerifyPage() | Izriše/obdela do=wkidentity_verify (vnos kode, zahteva po e-pošti, števec neuspelih poskusov) |
Sorodne teme
- Identity — vstop in pogosta opravila
- Koncepti — poteki, uveljavljanje prijave, varnost
- API referenca — metode pogodbe, zrcaljene iz repozitorija
- Dvofaktorsko overjanje — navodila za končnega uporabnika
- wkmail — pošiljanje pošte, prek katerega prispejo enkratne kode