Tehnična referenca
Priročnik za wkidentity: javna pogodba, vstopne točke postopkov z enkratno kodo, shranjevanje na disku, vse nastavitve in vsi razredi. Zakaj so stvari zgrajene tako, kot so, pojasnjujejo Koncepti; kaj želite narediti, najdete na strani 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
Identity Plugin Contract v1
Javna pogodba, prek katere drug vtičnik prebere trenutno sejo in lahko zahteva višje zagotovilo,
ne da bi sam izvajal TOTP ali enkratne kode po e-pošti. Ta stran je povzetek za upravljavce;
zavezujoča in popolna specifikacija (API, zagotovilo, dejavniki, življenjski cikel, povezava z
delovno površino, vedenje ob napakah, primer) je v repozitoriju:
lib/plugins/wkidentity/docs/contract-v1.md.
Zakaj ta pogodba obstaja: pred njo wkidentity ni imel niti ene javne metode – iskanje po
celotnem besedilu vseh drugih nameščenih vtičnikov ne najde nobene dejanske uporabe. Pogodba delovne
površine Fluent UI (glejte Workbench Plugin Contract v1, v nemščini) je že rezervirala polje
deskriptorja (requiresIdentity) in izrecno določila, da pravo uveljavljanje ostane pri lastnih
jedrnih kljukah paketa wkidentity – ničesar pa ni bilo, kar bi to obljubo izpolnilo.
Pet metod, nobene druge
helper_plugin_wkidentity_contract (plugin_load('helper', 'wkidentity_contract')):
| Metoda | Vprašanje |
|---|---|
currentIdentity() | Kdo je ta seja z vidika jedra? |
currentAssurance() | Kaj je ta seja dejansko dokazala? |
supports($capability) | Ali ta namestitev neko zmožnost sploh obvlada? |
satisfies($requirement, $scope) | Ali seja zahtevo že izpolnjuje? Zgolj poizvedba, brez stranskih učinkov. |
require($requirement, $scope, $returnTarget) | Izpolni zdaj, po potrebi preusmeri na dodatno preverjanje (step-up). |
Nobena javna metoda ne izda skrivnosti TOTP, ne ustvari kode za e-pošto in ne preveri dejavnika.
Ti osnovni gradniki ostanejo natanko tam, kjer so bili – v helper_plugin_wkidentity, ki ga
uporablja samo ta vtičnik. Vtičnik, ki pogodbo uporablja, do skrivnosti in kod zato nima dostopa.
Povezava s pogodbo delovne površine
Brez kakršne koli spremembe v wkfluentui. Ta pogodba že ima polje deskriptorja permission
(funkcija, ki velja dodatno k ACL in ob napaki dostop zavrne – fail-closed), ki ga prispevek lahko
nastavi prav za ta primer:
'permission' => function () { $identity = plugin_load('helper', 'wkidentity_contract'); return $identity !== null && $identity->satisfies('MFA_ANY'); },
Za ukaz, ki naj ob dejanski izvedbi zahteva dodatno preverjanje (in naj ne bo samo skrit, ko se
prikazuje), obdelava ukaza sama pokliče require(). Polje requiresIdentity v wkfluentui
ostane natanko to, kar je bilo že dokumentirano: svetovalno in brez porabnika. Ta pogodba ga ne
nadomesti, temveč izpolni.
Prepoznavanje zmožnosti
supports($name) – pet stalnih nizov: identity.authentication, identity.stepup,
identity.factor.totp, identity.factor.mailOtp, identity.assurance.anyMfa. V tej
različici vseh pet vrne pritrdilen odgovor.
Vstopne točke
Obe jedrni dejanji sta prevzeti, ne nadomeščeni – obstoječi zaznamki, stara e-poštna sporočila in povezave na prijavni kartici kažejo tja, in uporabnik, ki pristane na starem obrazcu in naleti na staro vedenje, mora razumeti dva sistema namesto enega:
| Naslov | Namen | Pogoj |
|---|---|---|
do=resendpwd | ponastavitev gesla | prevzeto, če dejanje ni izklopljeno |
do=register | samoregistracija | enako |
do=wkidentity_otp&ticket=<id> | vnovčenje kode; povezava iz e-poštnega sporočila | – |
register izklopljen ($conf['disableactions'] vsebuje register),
zato samoregistracija tu nima učinka. To je namenoma in ni napaka: prevzem najprej vpraša
actionOK(), namesto da bi dejanje prevzel in ga šele nato zavrnil. Sicer bi do=register
izrisal celoten obrazec za registracijo na wikiju, ki registracije ne dovoli – obrazec, ki je videti
kot povabilo, na vsak vnos pa odgovori z »ni dovoljeno«.
ID postopka (ticket) v povezavi je neobvezen. Uporabnik, ki ima kodo, e-poštno sporočilo pa
ni nikoli prispelo (na primer kodo, ki mu jo je predal skrbnik), jo lahko vnovči s svojim prijavnim
imenom – sicer bi imel kodo brez obrazca, v katerega sodi.
Vrstni red dokazov
recovery_factor določa, kateri dokaz sprejme ponastavitev – in tri vrednosti niso tri točke na
isti lestvici. Dve sta pravilnik, ena je meritev:
| Vrednost | Vrsta | Vedenje | Račun brez aplikacije za preverjanje |
|---|---|---|---|
mail | pravilnik | vedno enkratna koda po e-pošti. Privzeto – posodobitev za nikogar ničesar ne spremeni | enkratna koda po e-pošti |
auto | meritev | e-pošta, dokler je odhodna pošta dosegljiva; aplikacija za preverjanje, ko odhodna pošta merljivo ni več dosegljiva | kljub temu poskus po e-pošti, glejte spodaj |
totp | pravilnik | poštni predal se kot pot za obnovitev nikoli ne sprejme | ni samopostrežne poti – kodo mora izdati skrbnik |
auto in totp ne spremenita samo razpoložljivosti, temveč varnostni položaj. Pri kodi po
e-pošti identiteto dokaže nadzor nad shranjenim poštnim predalom, pri aplikaciji za preverjanje pa
posest nastavljene skrivnosti – in ta postane edini dokaz, saj obnovitvi geslo po definiciji
manjka. To je sprejemljivo in verjetno močneje (ni prenosne poti, na kateri bi kdo bral, ni predala,
ki bi ga kdo prevzel, ni pravila za posredovanje), opusti pa nekaj, kar pot po e-pošti prinese
brezplačno: imetnik računa med poskusom obnovitve ne vidi ničesar več (pri poti po e-pošti ga na
poskus opozori že sporočilo s kodo), temveč šele po opravljeni obnovitvi. Ukraden telefon je zato
tišji od ukradenega poštnega predala. Ugibanje še naprej omejuje otp_attempts – na postopek,
tako kot pri kodah po e-pošti.
Dve podrobnosti, ki izhajata iz zasnove in sta sicer videti kot napaki:
autose pri računu brez aplikacije za preverjanje vrne k e-pošti, tudi če so vrata SMTP merljivo zaprta. Meritev je napoved, ne potrdilo: lahko je zastarela, krajevnega poštnega strežnika ne vidi, popravilo – druga povezava – pa učinkuje takoj in je od tu nevidno. Če poskusa ne bi bilo, bi račun izgubil edino pot, ki jo je imel; poskus stane kvečjemu prekoračitev časa.- »Ni mogoče ugotoviti« pomeni »dovoljeno«, nikoli »zavrnjeno«.
autopotrebujewkmails prenosom SMTP; brez tega ni česa meriti in vrednost se vede kotmail. Pri vprašanjih razpoložljivosti negotov rezultat pomeni »na voljo« (fail open), sicer bi vsaka namestitev, ki je ni mogoče izmeriti, izgubila pot, ki jo je doslej brez težav uporabljala.
Pravilo za gesla
min_password_length (privzeto 14) se preverja na strežniku. Pravilo, ki je zapisano samo v
namigu pod poljem, je predlog – in polje ni mesto, kjer tipka napadalec. Geslo se poleg tega preveri
pred kodo: če se uporabnik pri vnosu novega gesla zatipka, zaradi tega ne porabi kode in mu ni
treba čakati na novo.
Čiščenje
Potekle postopke odstrani INDEXER_TASKS_RUN – isti vzdrževalni zagon, ki ga DokuWiki tako ali tako
sproži. Brez lastnega urnika, brez storitve.
Shranjevanje: izključno v datotekah, brez zbirke podatkov
Povezave s SQLite ali drugo zbirko podatkov ni. Natanko ena datoteka na uporabnika:
data/meta/wkidentity/<prijavno-ime>.secret
- Vsebina: majhna ovojnica JSON – od utrditve varnosti {"v":2,"factors":{"totp"?:{"secret":"BASE32..."},"email"?:{}}}, pri čemer sta lahko hkrati prisotna oba ključa – kot celota šifrirana z AES z jedrnima funkcijama
auth_encrypt()/auth_decrypt()(inc/auth.php), istim mehanizmom, ki ga jedro uporablja za piškotek »Zapomni si me«. Dve starejši obliki se še naprej bereta, nikoli pa ne zapisujeta: oblika brez različice {"method":"totp"|"email",...} in – pred vsako obliko JSON – gola skrivnost Base32. - Izpeljava ključa:
hash_hmac('sha256', 'wkidentity-secret-at-rest-v1', auth_cookiesalt())– ista namestitvena sol piškotkov kot pri jedrnem piškotku, vendar s stalno oznako konteksta, tako da se nikoli ne uporabi isto ključno gradivo kot pri piškotku. isEnrolled()preveri, ali dešifrirana ovojnica vsebuje vsaj en dejavnik – brez indeksa, brez predpomnilnika, brez datoteke registra.- Čakajoča skrivnost TOTP je med potrditvijo izključno v seji PHP (Koncepti: potek dela (vpis)), nikoli v tej datoteki. Potrditvena koda za e-pošto je shranjena kot zgoščena vrednost s soljo (od utrditve varnosti
password_hash(), prej SHA-256 brez soli – glejtedocs/threat-model.md, ugotovitev F2) v lastni, kratkotrajni datotekidata/meta/wkidentity/<prijavno-ime>.emailcode. - Novo od utrditve varnosti:
data/meta/wkidentity/<prijavno-ime>.totpreplay– drobna datoteka, ki hrani samo zadnji sprejeti števec HOTP za to prijavno ime, da enkrat uporabljena koda TOTP v svojem oknu tolerance ne bi bila sprejeta še enkrat (ugotovitev F1). Ni skrivnost, samo število. - Skrbniški pravilnik (kateri uporabniki, skupine, imenski prostori in ukazi zahtevajo drugi dejavnik oziroma katero stopnjo zagotovila) je ločeno v
conf/wkidentity-policy.json(glejte skrbniško ploščo spodaj) – podatki o vpisu in pravila uveljavljanja se ne mešajo. - Odprti postopki z enkratno kodo so spet ločeno, v
data/meta/wkidentity/otp/, ena datoteka na postopek. Koda sama tam nikoli ni v golem besedilu, samo njena zgoščena vrednost – datoteka torej odgovori na vprašanja »ali je postopek obstajal, kolikokrat je bilo poslano, koliko poskusov je ostalo, kdaj poteče«, nikoli pa na vprašanje »kakšna je koda«.
Skrbniška plošča
Paket prinese dva skrbniška zaslona, oba samo za skrbnika (superuser):
| Naslov | Vsebina |
|---|---|
do=admin&page=wkidentity | drugi dejavnik: nastavitev, obveznost za uporabnika in imenski prostor |
do=admin&page=wkidentity_invites | odprti postopki z enkratno kodo: povabilo, ponovno pošiljanje, popravek naslova, preklic |
Zaslon za drugi dejavnik
Tri površine izberete v desnem stolpcu z ikonami (naslov ?tab=overview, users ali namespaces). Ukazi so v vrstici ukazov, števila v vrstici stanja:
| Površina | Vsebina |
|---|---|
| Pregled | Ključna števila Nastavljeno (aplikacija), Nastavljeno (e-pošta), Zahtevani, a manjkajo in Zahtevani imenski prostori; število, ki ga lahko kliknete, odpre površino s preštetimi vnosi |
| Uporabniki | Seznam računov z iskanjem in stolpci Dejavnik priporočen, Aplikacija za preverjanje obvezna in Koda po e-pošti dovoljena; ukazi Shrani, Zavrzi spremembe in Ponastavi drugi dejavnik v vrstici ukazov; uporabniško ime izbere račun za stolpec s podrobnostmi |
| Imenski prostori | Predpone imenskih prostorov, ena na vrstico, v katerih branje in pisanje zahtevata drugi dejavnik |
Razlika med prvima stolpcema površine Uporabniki je bistvena: Dejavnik priporočen računu samo prikazuje opozorilo in ničesar ne zaklene; pri Aplikacija za preverjanje obvezna vsebina wikija za račun ostane zaklenjena, dokler aplikacija za preverjanje ni nastavljena in v tekoči seji dokazana – stran profila za nastavitev ostane dosegljiva.
Trajno shranjevanje je ločeno od Splošnih nastavitev DokuWikija, v conf/wkidentity-policy.json
(PolicyStore.php, vzorec 1:1 po wvdsentra/MappingStore.php: varnostna kopija .bak pred
vsakim prepisom, odporna normalizacija vnosov).
Povabila in odprti postopki
Naslov: do=admin&page=wkidentity_invites. Zaslon je zgrajen okoli ene meje: kode ni mogoče
poiskati. V shrambi je samo kot zgoščena vrednost, in prav ta lastnost nosi celoten potek. Zato
zaslon odgovori na vsa druga vprašanja, ki se pojavijo, ko uporabnik pokliče podporo – ali je bil
postopek odprt, na kateri naslov, kolikokrat je bilo poslano, kdaj poteče trenutna koda, koliko
poskusov je ostalo, kdaj se postopek zapre.
| Dejanje | Namen |
|---|---|
| Novo povabilo | Določite identiteto, skupine in obveznost dejavnika, preverite povzetek (očiščene vrednosti, dostop po ACL, začetna stran, roki) in nato z Pošlji povabilo pošljite natanko eno sporočilo. Račun nastane ob vnovčenju, v teh skupinah in s to obveznostjo; oseba si geslo izbere sama. Koda se nato prikaže enkrat, da jo skrbnik lahko preda sam, če e-poštno sporočilo ne prispe – prav za tak primer je povabilo zasnovano |
| Pošlji novo kodo | nova koda; prejšnja s tem preneha veljati. Najkrajši razmik otp_resend_gap tu ne velja, nova koda pa se enkrat prikaže – kdor tu pomaga, naj ne čaka in kode ne išče |
| Spremeni naslov in pošlji znova | napačno vtipkan naslov, najpogostejši razlog, da koda ni nikoli prispela – razveljavi tudi kodo, ki je že na poti na napačni naslov |
| Prekliči | oseba ne sodeluje več ali pa je bilo povabilo poslano pomotoma |
Isti prijemi so na voljo v ukazni vrstici (php bin/plugin.php wkidentity <ukaz>), za
primer, ko e-pošta ne doseže nikogar: list, code, invite (z --groups=a,b in
--mfa), cancel, purge.
Konfiguracija
Skrbništvo → Splošne nastavitve ($conf['plugin']['wkidentity'][…]). 22 nastavitev: nastavitve
drugega dejavnika (z obema stranema s pomočjo), nastavitve postopkov z enkratno kodo in ena za upravljanje računov.
Nastavitve drugega dejavnika
| Nastavitev | Privzeto | Opis |
|---|---|---|
issuer | '''' (prazno) | Ime izdajatelja v aplikaciji za preverjanje; prazno = naslov wikija ($conf['title']), sicer „DokuWiki“ |
show_debug_link | vklopljeno | V profilu prikaže povezavo na notranjo preizkusno stran |
help_page | '''' (prazno) | ID strani z navodili za nastavitev drugega dejavnika, povezava je v uporabniškem profilu. {lang} pomeni jezik strani, npr. {lang}:wiki:help:faq:two-factor; prazno = brez povezave |
help_page_recovery | '''' (prazno) | ID strani z navodili za izgubljeno aplikacijo za preverjanje, povezava je ob vnosu kode pri prijavi in pri dodatnem preverjanju (step-up); {lang} kot zgoraj. Stran mora biti berljiva brez prijave – kdor sledi povezavi, prav takrat ni prijavljen |
digits | 6 | Dolžina kode (6/7/8) |
period | 30 | Veljavnost kode v sekundah (30/60) |
window | 1 | Toleranca za odstopanje ure, v ± časovnih korakih |
allow_email_method | izklopljeno | Enkratno kodo po e-pošti omogoči kot alternativo aplikaciji za preverjanje – vklopite šele, ko je pošiljanje pošte preverjeno |
enforce_login | izklopljeno | Obveznost ob prijavi za uporabnike z že vpisanim dejavnikom – zasilno stikalo, glejte Koncepti: obveznost ob prijavi |
login_max_attempts | 5 | Neuspeli poskusi na eno prijavo, preden se ta zavrže |
login_attempt_window | 600 | Kako dolgo v sekundah velja prijava, ki čaka na drugi dejavnik. To je hkrati življenjska doba čakajoče prijave same: po izteku uporabnik začne znova pri geslu, tudi če ni imel nobenega neuspelega poskusa |
assurance_ttl | 3600 | Novo od utrditve varnosti. Koliko sekund opravljeno dodatno preverjanje (ali dejavnik, dokazan ob prijavi) šteje kot zagotovilo te seje, preden se seja vrne na AUTHENTICATED |
Nastavitve postopkov z enkratno kodo
Podrobna utemeljitev je v razdelku »Postopki z enkratno kodo« v Konceptih – tu so samo vrednosti in njihov učinek.
| Nastavitev | Privzeto | Opis |
|---|---|---|
otp_flows | vklopljeno | Ali se trije postopki sploh ponujajo. Izklopljeno = DokuWiki obdrži lastna obrazca za resendpwd in register |
recovery_factor | mail | Kateri dokaz sprejme ponastavitev: mail, auto ali totp. Glejte »Vrstni red dokazov« – auto in totp ne spremenita samo razpoložljivosti, temveč varnostni položaj |
otp_ttl | 1800 | Veljavnost ene kode v sekundah. Dovolj dolgo, da e-pošta prispe, in dovolj kratko, da šteje |
otp_attempts | 5 | Neuspeli poskusi na postopek. Nova koda jih ne napolni znova – prav to omejuje ugibanje |
otp_resend_gap | 60 | Najkrajši razmik v sekundah, preden je za isti postopek mogoče zahtevati novo kodo. Pri poti prek skrbnika namenoma ne velja |
reset_ttl | 86400 | Kako dolgo ostane odprt postopek ponastavitve (1 dan) |
register_ttl | 172800 | Kako dolgo ostane odprta samoregistracija (2 dneva) |
invite_ttl | 604800 | Kako dolgo ostane odprto povabilo (7 dni) – dovolj dolgo, da preživi konec tedna |
min_password_length | 14 | Najkrajše geslo, ki ga je mogoče nastaviti prek teh postopkov. Preverja se na strežniku |
otp_ttl meri kodo, tri vrednosti *_ttl
merijo postopek. Če otp_ttl zvišate, da bi »dali več časa«, podaljšate življenjsko dobo ključa v
poštnem predalu; če namesto tega podaljšate postopek, daste več časa, ne da bi to storili.
Vedenje pri neveljavni vrednosti
Nobena vrednost te skupine ne povzroči prekinitve:
recovery_factor– vsaka neprepoznana vrednost se obravnava kotmail. Neberljiva nastavitev ne sme spremeniti, kako ljudje obnovijo dostop do računa, inmailje to, kar so imeli prej.digitsje omejen na 6–8,periodna 5–300,windowna 0–10; vrednosti zunaj teh mej se nadomestijo s 6 / 30 / 1.
digits/period iz URI
otpauth:// in vedno računata s 6 števkami in 30 sekundami. Drugačne vrednosti delujejo samo z
aplikacijami, ki te parametre dejansko upoštevajo (npr. Aegis, FreeOTP, 2FAS, Bitwarden) – z obema
velikima aplikacijama bi bila sicer vsaka koda zavrnjena.
Upravljanje računov
| Nastavitev | Privzeto | Opis |
|---|---|---|
audit_require_reason | izklopljeno | Pri vsaki spremembi, ki jo skrbnik naredi na računu, zahteva utemeljitev. Velja samo za skrbniške spremembe: sprememba profila, ki jo naredi oseba sama, in vnovčenje povabila potekata brez utemeljitve. Ko je vklopljena, velja na vseh poteh – v meniju vrstice, pri ukazu za izbrane vrstice in v obrazcu jedra –, ker je vezana na dogodek, ne na zaslon |
Tehnična referenca
Razred: action_plugin_wkidentity
Datoteka: lib/plugins/wkidentity/action.php
| Kljuka | Namen |
|---|---|
FORM_UPDATEPROFILE_OUTPUT | V obrazec profila vstavi razdelek dvostopenjskega preverjanja – vpis prek aplikacije in e-pošte ter za vsak dejavnik neodvisno stanje in stikalo za izklop (wkidentity_disable_totp/wkidentity_disable_email) |
ACTION_ACT_PREPROCESS | Obdela wkidentity_action=start|confirm|email_start|email_confirm; prevzame wkidentity_debug ter (prek LoginGate/StepUp) wkidentity_verify, wkidentity_stepup in wkidentity_stepup_start |
TPL_ACT_UNKNOWN | Izriše notranjo preizkusno stran wkidentity_debug ter (prek LoginGate/StepUp) wkidentity_verify, wkidentity_stepup in wkidentity_stepup_start |
TPL_METAHEADER_OUTPUT | Knjižnico QR in povezovalne skripte naloži samo v pogledih, ki jih potrebujejo |
AUTH_ACL_CHECK | Zavrne branje in pisanje v imenskih prostorih z obveznostjo, če ta seja veljavne zahteve ne izpolnjuje – od utrditve varnosti glede na dejansko zagotovilo, prej samo glede na vpis (ugotovitev F6) |
ACTION_DENIED_TPLCONTENT | Na strani z zavrnitvijo prikaže pojasnilo in pot naprej, kadar zaporo povzroči ta vtičnik – »ni vpisan« ali »ni dokazano«, vsakič z drugo povezavo |
TPL_CONTENT_DISPLAY | Opozorilni pas na celotnem mestu za »zahtevano, a ni vpisano« |
AUTH_LOGIN_CHECK | Prenese obdelavo 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 oziroma preverjanje TOTP s toleranco odstopanja ure in zaščito pred ponovno uporabo (parameter $login od utrditve varnosti; sprejeti časovni korak se ne sprejme dvakrat) |
buildOtpAuthUri() | URI otpauth:// za kodo QR |
isEnrolled() / hasFactor() / enrolledFactors() / method() / loadSecret() / saveSecret() / saveEmailMethod() / removeFactor() / removeSecret() | Shranjevanje ovojnice v data/meta/wkidentity/ – od utrditve varnosti več dejavnikov hkrati, upravljanih neodvisno (hasFactor()/enrolledFactors()/removeFactor() so novi; method() je le še kratka oblika za prikaz) |
sendEmailChallenge() / verifyEmailChallenge() | Enkratna koda po e-pošti: pošiljanje, shranjevanje kot zgoščena vrednost s soljo in z rokom veljavnosti (password_hash() od utrditve varnosti, prej SHA-256), enkratno preverjanje |
Razred: PolicyStore
Datoteka: lib/plugins/wkidentity/PolicyStore.php (imenski prostor dokuwiki\plugin\wkidentity)
| Metoda | Opis |
|---|---|
load() / save() | Naloži oziroma shrani conf/wkidentity-policy.json (vzorec wvdsentra/MappingStore.php) |
isUserRequired() | Ali je prijavno ime označeno kot »Dejavnik priporočen« (opozorilo) |
isNamespaceRequired() | Ujemanje predpone s starejšim seznamom obveznih imenskih prostorov |
requirementFor($type, $id) | Zahteva, vezana neposredno na ta obseg; pri namespace se uporabi MFA_ANY, če velja samo starejši seznam |
combine($a, $b) | Statična, nova od utrditve varnosti. Strožja od dveh zahtev; v edini nedefinirani celici, sporu TOTP proti MAIL_OTP, obvelja $b |
effectiveRequirement($scope, $user, $groups) | Nova od utrditve varnosti. Dejansko veljavna zahteva – imenski prostor oziroma neposredni obseg, vsaka skupina in uporabnik, združeni prek combine(); to je tisto, kar enforceNamespacePolicy() v resnici pokliče |
Razred: action_plugin_wkidentity_otpflows
Datoteka: lib/plugins/wkidentity/action/otpflows.php
Je lastnik dejanja wkidentity_otp in prevzame obe jedrni vstopni točki.
| Kljuka | Namen |
|---|---|
ACTION_ACT_PREPROCESS | Prevzame resendpwd in register (samo če actionOK()), obdela štiri operacije |
TPL_CONTENT_DISPLAY | Izriše ustrezni obrazec |
INDEXER_TASKS_RUN | Odstrani potekle postopke |
id bi pri tem dejanju nastavilo
DokuWikijev $ID in naslednjo preusmeritev poslalo na stran wikija, poimenovano po tem, kar je bilo
vtipkano – napaka, ki jo je ta zbirka paketov enkrat že plačala.
Razred: helper_plugin_wkidentity_otpflows
Datoteka: lib/plugins/wkidentity/helper/otpflows.php
| Metoda | Opis |
|---|---|
recoveryFactor() | Kateri dokaz mora ta račun predložiti po veljavnem pravilniku |
expectedProof() | Kaj naj zaslon zahteva. Izpelje se samo iz stanja celotnega wikija in zato ne sprejme prijavnega imena |
requestReset() / requestRegistration() / invite() | Odpre postopek ustrezne vrste |
issueRecoveryCode() | Pot prek skrbnika. Iz spletnih obrazcev ni dosegljiva – metoda pove resnico o računu, zato je pridržana potem, ki so dokazale več, kot lahko dokaže obrazec. Ime se nanaša na geslo, ne na drugi dejavnik: metoda odpre postopek z enkratno kodo za nastavitev gesla in se nobenega dejavnika ne dotakne. To ni »obnovitvena koda« v smislu shranjene nadomestne kode – teh ni, glejte Izgubljena aplikacija za preverjanje ali pokvarjen telefon |
reissue() | Nova koda za odprt postopek; dosedanja preneha veljati |
redeem() | Vnovči kodo in nastavi geslo. Preveri geslo pred kodo |
Razred: OtpStore
Datoteka: lib/plugins/wkidentity/Domain/OtpStore.php (imenski prostor dokuwiki\plugin\wkidentity\Domain)
Shramba postopkov, brez kakršnega koli znanja o DokuWikiju – preverjanje kode iz aplikacije za preverjanje ji je podano kot povratni klic, namesto da bi ga izvedla sama.
| Metoda | Opis |
|---|---|
open() / reissue() / redeem() | Odpre postopek, izda novo kodo, vnovči kodo |
pending() / findOpenFor() / hasOpenFor() / proofOf() | Podatki za skrbniški zaslon |
purge() / drop() | Odstrani potekle postopke, prekliče posamezen postopek |
Povratni klic za preverjanje kode pozna tri odgovore, ne le dva: ujema se, ne ujema se (stane en poskus – prav to omejuje ugibanje) in ni mogoče ugotoviti (ne stane nič, ker je napaka na naši strani in ne na strani obiskovalca). Če bi se zadnja dva združila, bi lahko pokvarjena veja za aplikacijo za preverjanje v petih zahtevah porabila celoten proračun poskusov in osebo zaklenila iz obnovitve, ki je dejansko sploh ni mogla poskusiti.
Razred: LoginGate
Datoteka: lib/plugins/wkidentity/LoginGate.php (imenski prostor dokuwiki\plugin\wkidentity)
| Metoda | Opis |
|---|---|
gate() | Obdelava AUTH_LOGIN_CHECK: lastno preverjanje gesla, uporabnike z vpisanim dejavnikom ustavi pred dokončno vzpostavitvijo seje |
renderVerifyPage() | Izriše in obdela do=wkidentity_verify (vnos kode, zahteva za kodo po e-pošti, števec neuspelih poskusov) |
Razred: helper_plugin_wkidentity_contract
Datoteka: lib/plugins/wkidentity/helper/contract.php
Javna fasada pogodbe Identity Plugin Contract v1 – glejte razdelek zgoraj in
docs/contract-v1.md.
| Metoda | Opis |
|---|---|
currentIdentity() / currentAssurance() | samo branje, brez stranskih učinkov; currentAssurance() od utrditve varnosti upošteva rok veljavnosti (expiresAt) |
supports() / list() | prepoznavanje zmožnosti |
satisfies() | zgolj poizvedba. Od utrditve varnosti vedno združi izrecno zahtevo vtičnika, ki metodo uporablja, z PolicyStore::effectiveRequirement() za obseg (obvelja strožja); pri $requirement = null se opre samo na pravilnik |
require() | izpolni zdaj ali preusmeri na StepUp; če ustrezen dejavnik ni nastavljen, zavrne, namesto da bi poskusil. Tudi ta metoda preverja proti združeni zahtevi, ne samo proti podani |
Razred: StepUp
Datoteka: lib/plugins/wkidentity/StepUp.php (imenski prostor dokuwiki\plugin\wkidentity)
| Metoda | Opis |
|---|---|
begin() | statična, kliče jo fasada: čakajoče dodatno preverjanje shrani v sejo (od utrditve varnosti z vsemi nastavljenimi metodami, ne samo z eno) in preusmeri na do=wkidentity_stepup |
renderStepUpPage() | Izriše in obdela izziv (pri dveh nastavljenih dejavnikih vneseno kodo preizkusi z obema), ob uspehu zapiše oznako zagotovila (stopnja, dejavnik, obseg, rok) in preusmeri na preverjeni cilj vrnitve |
renderStepUpStartPage() | Nova od utrditve varnosti. Most, na katerega kaže zavrnitev imenskega prostora z razlogom »ni dokazano« (do=wkidentity_stepup_start): veljavno zahtevo za trenutno stran na strežniku izračuna znova in prenese obdelavo na require() – nikoli z vrednostjo zahteve, ki jo pošlje odjemalec |
recordAssurance() | Javna, nova od utrditve varnosti – kliče jo tudi LoginGate, da dejavnik, dokazan ob prijavi, šteje enako kot dejavnik, dokazan z dodatnim preverjanjem |
Sorodne teme
- Identity – začetna stran in pogosta opravila
- Koncepti – zagotovilo, pravilnik, postopki, varnost
- Referenca API – metode pogodbe, zrcaljene iz repozitorija
- Nastavitev dvostopenjskega preverjanja – navodila za končne uporabnike, razumljiva brez tehničnega predznanja
- Workbench Plugin Contract v1 – njegovo polje
permissionta pogodba uporablja - wkmail – pošiljanje pošte, prek katerega prispejo enkratne kode