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

Java & JWT Stateless authentication

  • 1.
    Java & JWT Statelessautentikacija 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 Sessionse 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 Moramopronaći način da oba servera prepoznaju isti cookie!
  • 6.
    Stateful autentikacija 4/5 Štoako se aplikacijski server na kojem se nalazi korisnikov session sruši? Rješenje 1 – Sticky session
  • 7.
    Stateful autentikacija 5/5 Svakirequest 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 Tokennije 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 naklijentu • 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 toi 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 = Rastkorisnika na Internetu Rast korisnika na Internetu = Skaliranje Skaliranje = JWT JWT = Budućnost
  • 21.