Barvna shema: Riviera
Trenutno dejavna stran: start » sl » Dokumentacija » Razširitve DokuWikija (WvdS) » Identity » Tehnična referenca

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

Stanje izvedbe in potek utrjevanja varnosti opisuje zapis Stanje izvedbe in potek utrjevanja.

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 –
Na tej namestitvi je 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:

  • auto se 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«. auto potrebuje wkmail s prenosom SMTP; brez tega ni česa meriti in vrednost se vede kot mail. 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 – glejte docs/threat-model.md, ugotovitev F2) v lastni, kratkotrajni datoteki data/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
Štiri časovne vrednosti so dve različni uri. 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 kot mail. Neberljiva nastavitev ne sme spremeniti, kako ljudje obnovijo dostop do računa, in mail je to, kar so imeli prej.
  • digits je omejen na 6–8, period na 5–300, window na 0–10; vrednosti zunaj teh mej se nadomestijo s 6 / 30 / 1.
Microsoft Authenticator in Google Authenticator prezreta 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
Imena polj imajo predpono, in to ni okras. Polje z imenom 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

sl/wiki/dwe/wkidentity/reference.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille