12 gruodžio 2025
Autorizacijos serverį parašyti, o ne nusipirkti
AltPro pats išduoda savo OAuth2 žetonus iš atskiros paslaugos — darbo daugiau nei su prisijungimo forma, o nauda viena, bet svarbi.
Lengvoji AltPro versija — viena Spring Boot aplikacija su prisijungimo forma, sesijos slapuku ir @PreAuthorize ant kontrolerių. Ji veikia, jos kodo kelis kartus mažiau, ir aš jos nedariau.
Priežastis
Viena aplikacija visada gali patikrinti ne tą dalyką. Kai sesija ir domenas gyvena tame pačiame procese, „ar šis žmogus prisijungęs“ ir „ar šiam žmogui leidžiama“ yra du klausimai, atsakomi iš to paties objekto; o tą dieną, kai atsiranda antras klientas — mobili programėlė, skriptas, kita paslauga — nebelieka siūlės, ant kurios uždėti žetono ribą. Uždedi ją, ir ji atsiduria šalia slapuko kelio, o ne vietoj jo.
Todėl paslaugos yra dvi:
altpro-auth— Spring Authorization Server. Išduoda OAuth2 ir OIDC žetonus. Saugo naudotojus, registruotus klientus ir sutikimus.altpro-api— resursų serveris, kuris neatsakys be galiojančioBearerJWT ir apskritai nežino, kas yra slaptažodis.
React klientas nukreipiamas į išdavėją, grįžta su tapatybės žetonu ir kreipiasi į API su prieigos žetonu. nginx maršrutizuoja /auth/* ir /api/*, o abi paslaugos dalijasi viena MongoDB be jokio persidengimo tarp to, ką saugo.
Ką tai davė
- API negali būti sugundytas pasitikėti slapuku, nes jo niekada neturėjo.
- Antras klientas — tai kliento užregistravimas, o ne antro įėjimo suprojektavimas.
- Teisių klaida krenta ties tinklo riba — 401 iš paslaugos, neturinčios jokio pagrindo būti nuolaidžiai — o ne kažkur užklausos viduje, kuria jau buvo pasitikėta.
Ko tai kainavo
Du diegimai, du konfigūracijų rinkiniai ir vietinis darbo ciklas, kuriame derinamas dalykas dažnai būna nukreipimas, o ne kodas. Pirma popietė praėjo vien prie issuer-uri nesutapimų.
Čia to vertėjo, nes visa užduotis ir buvo ta riba. Jei aprašas būtų buvęs „padaryk užduočių sąrašą“, prisijungimo forma būtų buvusi teisingas atsakymas.
© 2026 Tauras Giedraitis · Kaunas, Lietuva · Visos teisės saugomos