Kontekstas parenka atsakymą: atšaukiamumas prieš be-būseniškumą
Štai spąstai, kuriuos ši pamoka nukenksmina: internetas pilnas „JWT prieš sesijas — ką naudoti?" įrašų, kurie renka nugalėtoją. Nė vienas nelaimi. Jie optimizuoti skirtingiems kontekstams, ir tu dabar gyvenai abiejuose.
Mobilus klientas neturi slapukų indo — ir kalbasi su API. Pica — vietinė programa, siekianti JSON API. Nėra naršyklės, automatiškai pridedančios slapuką; programa pati tvarko savo kredencialą ir aiškiai nustato antraštę. API gali būti keli be-būsenos egzemplioriai už apkrovos balansuotojo, be bendros sesijų lentelės. Tame pasaulyje savarankiškas, parašu patikrintas žetonas yra natūralus atitikmuo: kiekvienas egzempliorius gali jį patikrinti vienas, o klientas vis tiek ketino tvarkyti ir pridėti kredencialą ranka. JWT be-būseniškumas čia yra privalumas.
Serveryje atvaizduojama programa turi naršyklę — ir sesijų lentelę. SignFlow atvaizduoja HTML naršyklei, kuri automatiškai siunčia slapuką su kiekviena užklausa. Duomenų bazė jau yra užklausos kelyje (kiekvienas puslapis skaito iš jos). Pridėti vieną indeksuotą sesijos nuskaitymą yra nereikšminga, o mainais programa gauna serverio-autoritetingas sesijas: ji mato, kas prisijungęs, gali baigti sesijas ir atšaukti momentaliai. Sesijos slapuko būseniškumas čia yra privalumas.
Mainai, įvardyti: atšaukiamumas prieš be-būseniškumą. JWT duoda be-būsenės patikrą ir atima atšaukimą. Serverio sesija duoda atšaukimą ir atima be-būseniškumą (jai reikia saugyklos). Abu dovanai negauni — kiekvienas dizainas moka vieną iš šių kaštų. Kontekstas nusprendžia, kuris kaštas pigesnis:
| Pica (mobili → API) | SignFlow (naršyklė → serveryje atvaizduojama) | |
|---|---|---|
| Kredencialas | JWT Authorization antraštėje |
neskaidrus žetonas HttpOnly slapuke |
| Serverio būsena | jokios — tikrina pagal parašą | sessions eilutė kiekvienam prisijungimui |
| Patikra | iš naujo apskaičiuoja parašą | DB nuskaitymas pagal žetono maišą |
| Atšaukimas | neįmanomas (nėra ką ištrinti) | vienas DELETE |
| Siunčia | klientas, aiškiai | naršyklė, automatiškai |
| Plečiasi į N egzempliorių | trivialiai (be būsenos) | reikia bendros sesijų saugyklos |
Perskaityk lentelę kaip vieną sakinį: atsakymas keičiasi, nes keičiasi klientas ir diegimas. Tai ne skonio ar mados reikalas; tai mechanizmas, atitinkantis savo aplinką. Dabar gali argumentuoti tai iš patirties, nes išleidai abu.