Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Javantura v3 - Java & JWT Stateless authentication – Karlo Novak

1,434 views

Published on

Javantura v3 - Java & JWT Stateless authentication – Karlo Novak

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Javantura v3 - Java & JWT Stateless authentication – Karlo Novak

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

×