Upload
hujak-hrvatska-udruga-java-korisnika-croatian-java-user-association
View
1.281
Download
4
Embed Size (px)
Citation preview
• Stateful autentikacija• JSON Web Tokens• Java i JWT• Implementacija sa Springom• Zaključak
Sadržaj
• Cookie-i su „klasičan” mehanizam održavanja autentikacije između različitih zahtjeva istog korisnika (session)
• ID sessiona pamti se u memoriji na serveru čime se kreira stanje (state) – otežava skaliranje
Stateful autentikacija 1/5
Stateful autentikacija 2/5
Session se pohranjuje u memoriji i identificra se putem cookiea kojeg korisnik na svakom zahtjevu šalje.
Što ako imamo više od jednog aplikacijskog servera?
Stateful autentikacija 4/5
Što ako se aplikacijski server na kojem se nalazi korisnikov session sruši?
Rješenje 1 – Sticky session
Stateful autentikacija 5/5
Svaki request ide na bazu?Možemo uvesti cache, ali to se teško skalira (na veći broj servera)
Rješenje 2 – Session u bazi
JSON Web Tokens
• Otvoren standard koji omogućava siguran prijenos informacija među različitim stranama (sustavima, korisnicima..)
• Najčešće korišten pri autentikaciji, no može se koristiti i za prijenos ostalih podataka
Koristi se nakon uspješne inicijalne autentikacije!(npr. Basic Auth-om)
Struktura tokena
• Header – tip tokena i algoritam hashiranja • Payload – podaci tj. prava (claims), mogu biti reserved, public ili private• Signature – potpis kao potvrda da se korisnik ne predstavlja lažno i da
poruka nije mijenjana na putu
Java i JWT• JWT je (trenutno) relativno slabo podržan• 3 najpopularnija librarya za generiranje i
verifikaciju tokena:– JJWT– Nimbus– Java JWT
• Većina popularnih security frameworka i dalje ne podržava JWT out of the box
Kako to implementirati?• Potrebna je ručna implementacija korištenjem
jednog od navedenih librarya• Idealno ako imamo security framework koji se
lagano može proširivati....
Spring Security + JWTSecurityContextPersistenceFilter
LogoutFilter
UsernamePasswordProcessingFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
Resource
{ NašJwtFilter
Spring Security + JWT
AuthenticationManager
AuthenticationProvider
DaoAuthenticationProvider LdapAuthenticationProvider JWTAuthenticationProvider
Spring Security + JWT
Filter dohvaća token iz HTTP requesta i šalje ga na provjeru AuthenticationManager-u
Spring Security + JWT
AuthenticationProvider uz pomoć JWT librarya parsira token i izvlači iz njega podatke.U ovom slučaju to je korisničko ime od kojeg se zatim kreira User objekt koji se sprema u SecurityContext kao logirani korisnik. Ako je taj objekt postavljen Spring Security propušta korisnika do zaštićenog resursa.
Pohrana tokena na klijentu• U local storage-u (HTML5)
– XSS?• U.... cookieu!
– CSRF?
• Šalje se u headeru pri svakom requestu
Prednosti JWT-a• Veličina
– Malen, stane u HTTP header, malen overhead prijenosa
• Samostalan– Sadrži sve informacije potrebne za autentikaciju čime
miče potrebu za višestrukim korištenjem baze ili drugog autentikacijskog resursa
• Izračunljiv– Nije ga potrebno pohranjivati na serveru, podatke je
moguće na svakom zahtjevu „izračunati” iz tokena
Ima li to i kakvu manu?• Na svakom requestu potrebno je procesorsko
vrijeme za provjeru i „izračun” podataka iz tokena– S druge strane i dohvat iz baze traje određeno
vrijeme...• Neporez pri rukovanju na klijentu
– Podložno XSS, CSRF napadima• Nepodržanost out of the box
Zaključak
Budućnost = Rast korisnika na InternetuRast korisnika na Internetu = Skaliranje
Skaliranje = JWT
JWT = Budućnost