SlideShare a Scribd company logo
1 of 21
Java & JWT
Stateless autentikacija
Karlo Novak, SV Group d.o.o.
karlo.novak@svgroup.hr
• 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 3/5
Moramo pronaći način da oba servera prepoznaju isti cookie!
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
JWT u akciji
Token nije spremljen u memoriji, bazi ili cache-u!
Stateless autentikacija ✓
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 + JWT
SecurityContextPersistenceFilter
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 Internetu
Rast korisnika na Internetu = Skaliranje
Skaliranje = JWT
JWT = Budućnost
A sad vi...
karlo.novak@svgroup.hr

More Related Content

Similar to Java & JWT Stateless authentication

JavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaJavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaMiroslav Resetar
 
Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Denis Kranjčec
 
WinDays 13 - Internet Explorer 10 - san koji je postao java
WinDays 13 - Internet Explorer 10 - san koji je postao javaWinDays 13 - Internet Explorer 10 - san koji je postao java
WinDays 13 - Internet Explorer 10 - san koji je postao javaMatija Šmalcelj
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudDubravko Marak
 

Similar to Java & JWT Stateless authentication (6)

JavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaJavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenja
 
Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?
 
JavaCro'14 - Packaging and installing of the JEE solution – Miroslav Rešetar
JavaCro'14 - Packaging and installing of the JEE solution – Miroslav RešetarJavaCro'14 - Packaging and installing of the JEE solution – Miroslav Rešetar
JavaCro'14 - Packaging and installing of the JEE solution – Miroslav Rešetar
 
WinDays 13 - Internet Explorer 10 - san koji je postao java
WinDays 13 - Internet Explorer 10 - san koji je postao javaWinDays 13 - Internet Explorer 10 - san koji je postao java
WinDays 13 - Internet Explorer 10 - san koji je postao java
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloud
 
Java card (2003)
Java card (2003)Java card (2003)
Java card (2003)
 

Java & JWT Stateless authentication

  • 1. Java & JWT Stateless autentikacija Karlo Novak, SV Group d.o.o. karlo.novak@svgroup.hr
  • 2. • Stateful autentikacija • JSON Web Tokens • Java i JWT • Implementacija sa Springom • Zaključak Sadržaj
  • 3. • 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
  • 4. 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?
  • 5. Stateful autentikacija 3/5 Moramo pronaći način da oba servera prepoznaju isti cookie!
  • 6. Stateful autentikacija 4/5 Što ako se aplikacijski server na kojem se nalazi korisnikov session sruši? Rješenje 1 – Sticky session
  • 7. 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
  • 8. 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)
  • 9. 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
  • 10. JWT u akciji Token nije spremljen u memoriji, bazi ili cache-u! Stateless autentikacija ✓
  • 11. 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
  • 12. 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....
  • 13. Spring Security + JWT SecurityContextPersistenceFilter LogoutFilter UsernamePasswordProcessingFilter ExceptionTranslationFilter FilterSecurityInterceptor Resource {NašJwtFilter
  • 14. Spring Security + JWT AuthenticationManager AuthenticationProvider DaoAuthenticationProvider LdapAuthenticationProvider JWTAuthenticationProvider
  • 15. Spring Security + JWT Filter dohvaća token iz HTTP requesta i šalje ga na provjeru AuthenticationManager-u
  • 16. 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.
  • 17. Pohrana tokena na klijentu • U local storage-u (HTML5) – XSS? • U.... cookieu! – CSRF? • Šalje se u headeru pri svakom requestu
  • 18. 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
  • 19. 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
  • 20. Zaključak Budućnost = Rast korisnika na Internetu Rast korisnika na Internetu = Skaliranje Skaliranje = JWT JWT = Budućnost