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.

JWT: JSON Web Tokens - bye bye Session and Cookie - RFC7519

270 views

Published on

JWT: JSON Web Tokens. Bye bye cookie and session for better CyberSecurity and Scalability.

Slide del talk di Mario Rossano al Linux Day Napoli 2017.

Descrizione dello standard RF7519 riguardante JWT "JSON Web Tokens" mediante il quale si eliminano le sessioni - ed i cookie - per la gestione dell'autenticazione utente. Il vantaggio principale è nell'incremento di performance (non essendovi chiamate al database per recuperare i dati di sessione), nell'essere mobile-friendly, adatto anche ad applicazioni native e stateless, ottimale quindi anche in ottica RESTful.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

JWT: JSON Web Tokens - bye bye Session and Cookie - RFC7519

  1. 1. A cura di Mario Rossano JWT: JSON Web Tokens LinuxDay Napoli 2017 Star Trek enthusiast CTO Netlogica – web and software engineering NaLUG member CPAN author Italian Perl Community member anak@cpan.org software@netlogica.it https://netlogica.it $ ./bye_bye_cookie_and_session > improved CyberSecurity and Scalability
  2. 2. { "JWT": { "question1": "cos’è", "question2": "come è fatto?", "question3": "a cosa serve?", "question4": "è sicuro?", "declaration1": "vantaggi", "declaration2": "classi", "example": "case study" } } JWT: JSON Web TokensJWT: JSON Web Tokens LinuxDay Napoli 2017
  3. 3. ● È uno standard (RFC 7519) per la trasmissione di informazioni ● Le informazioni sono impacchettate in formato JSON ● Implementa diversi algoritmi crittografici per la firma delle informazioni che trasporta ● Implementa internamente un MAC per la verifica delle informazioni trasmesse ● È self-contained ovvero trasporta in sé tutti i dati necessari per il suo utilizzo JWT: JSON Web Tokens /> cos’è?cos’è?JWT: JSON Web Tokens /> cos’è?cos’è?
  4. 4. ● È formato da tre stringhe codificate in base64 qualitativamente differenti e separate dal punto “.” (ASCII 46) JWT: JSON Web Tokens /> come è fatto?come è fatto?JWT: JSON Web Tokens /> come è fatto?come è fatto?
  5. 5. header è costituito da due parti ● typ: dichiarazione del tipo ● alg: algoritmo crittografico JWT: JSON Web Tokens /> come è fatto? >come è fatto? > headerheaderJWT: JSON Web Tokens /> come è fatto? >come è fatto? > headerheader { "typ": "JWT", "alg": “HS256” }
  6. 6. payload contiene le informazioni da trasferire Ad es.: ● id: identificativo utente ● name: nome e cognome utente ● role: privilegio utente JWT: JSON Web Tokens /> come è fatto? >come è fatto? > payloadpayloadJWT: JSON Web Tokens /> come è fatto? >come è fatto? > payloadpayload { "id": "1234567", "name": “John Doe”, "role": “admin” }
  7. 7. signature è la firma per la verifica dei dati Costruita mediante hash della concatenazione di header, payload con secret come sale crittografico (chiave segreta - stringa) var encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload); HMACSHA256(encodedString, 'secret'); JWT: JSON Web Tokens /> come è fatto? >come è fatto? > signaturesignatureJWT: JSON Web Tokens /> come è fatto? >come è fatto? > signaturesignature
  8. 8. Il token completo è quindi del tipo seguente: JWT: JSON Web Tokens /> come è fatto? >come è fatto? > risultatorisultatoJWT: JSON Web Tokens /> come è fatto? >come è fatto? > risultatorisultato
  9. 9. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? JWT è utilizzato per gestire l’autenticazione utente
  10. 10. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? JWT è utilizzato per gestire l’autenticazione utente Ad esempio viene implementato da...
  11. 11. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? ● HTTP è un protocollo stateless. Per "ricordare" che un utente è loggato si usano le sessioni ● Le sessioni sono costituite da un oggetto server-side (ad es. id utente) e da un cookie contenente ad es. l'id dell'oggetto server-side Prima di JWT… client → server
  12. 12. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? ● Se il servizio esposto è più complesso e richiede server specializzati in ottica microservices il dualismo cookie- session non funziona: i server ignorano le sessioni degli altri. ● Allo stesso modo anche un sistema di bilanciamento del carico di un webserver canonico produce la stessa problematica Come si è risolto? Prima di JWT… client → multiple server
  13. 13. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? ...come si è risolto? ● Interponendo un proxy che gestisce le transazioni e provvede a uniformare le sessioni ● Risolto? Si, ma con incremento di complessità e perdita di scalabilità C’è di meglio? Prima di JWT… client → multiple server
  14. 14. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? ...come si è risolto? ● Interponendo un proxy che gestisce le transazioni e provvede a uniformare le sessioni ● Risolto? Si, ma con incremento di complessità e perdita di scalabilità C’è di meglio? Si! Prima di JWT… client → multiple server
  15. 15. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? ● Il server verifica le credenziali al login e rilascia il token ● l’utente memorizza il token localmente ● Il client, per tutte le successive richieste all’infrastruttura servente, invierà il token che sarà verificato ad ogni richiesta Con JWT… client → single/multiple server
  16. 16. JWT: JSON Web Tokens /> a cosa serve?a cosa serve?JWT: JSON Web Tokens /> a cosa serve?a cosa serve? Con JWT… client → login on multiplatform
  17. 17. JWT: JSON Web Tokens /> è sicuro?è sicuro?JWT: JSON Web Tokens /> è sicuro?è sicuro? Si! Se applicato nel modo corretto. ● E’ consigliabile trasferire JWT tramite HTTPS ● La signature può essere effettuata anche con RSARSA, separando quindi chiave pubblica dalla privata ● Inoltre JWT assicura la veridicità della chiamata mediante MAC Message Authentication Code
  18. 18. JWT: JSON Web Tokens /> è sicuro? MACè sicuro? MACJWT: JSON Web Tokens /> è sicuro? MACè sicuro? MAC Flusso di un MAC
  19. 19. JWT: JSON Web Tokens /> vantaggivantaggiJWT: JSON Web Tokens /> vantaggivantaggi ● Stateless: non occorre gestire session. Ottimale per applicazioni RESTful ● Portabile: un solo token può essere riutilizzato su differenti backend, domini, applicazioni ● Cookieless: sul client il token può essere salvato dove si vuole: localStorage, indexDB o anche cookie(?!) :O (ndr. non lo farete vero?) ● Mobile friendly: implementabile ovunque, su web, su app native (per cui la gestione cookie avrebbe richiesto uno sforzo aggiuntivo) ● Built-in Expiration: dichiarando il claim exp nell’header ● CORS friendly: Cross-Origin Resource Sharing ● Decentralizzato: il token può essere generato ovunque ● Performance: cercare sessioni nel db ed estrarre le informazioni è dispendioso rispetto al calcolo di un HMACSHA256 ● Standard: le specifiche RFC7519 sono state implementate in numerosi ambienti
  20. 20. JWT: JSON Web Tokens /> classiclassiJWT: JSON Web Tokens /> classiclassi .NET Node.js Java PHP Python Javascript Perl Ruby Haskell Swift Objective-C C Lista aggiornata su: Haskell https://jwt.io/
  21. 21. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study Programma il Futuro è il progetto del CINI e del MIUR in collaborazione con Code.org per la diffusione del pensiero computazionale in Italia.
  22. 22. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study Programma il Futuro è il progetto del CINI e del MIUR in collaborazione con Code.org per la diffusione del pensiero computazionale in Italia. Nell’anno scolastico 2016/17 sono stati coinvolti 1’600’000 studenti
  23. 23. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study Programma il Futuro è il progetto del CINI e del MIUR in collaborazione con Code.org per la diffusione del pensiero computazionale in Italia. Nell’anno scolastico 2016/17 sono stati coinvolti 1’600’000 studenti TIM in qualità di partner del progetto ha fornito a Programma il Futuro la sua piattaforma di crowdfunding per sostenere le attività nel triennio 2017/20
  24. 24. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study Programma il Futuro è il progetto del CINI e del MIUR in collaborazione con Code.org per la diffusione del pensiero computazionale in Italia. Nell’anno scolastico 2016/17 sono stati coinvolti 1’600’000 studenti TIM in qualità di partner del progetto ha fornito a Programma il Futuro la sua piattaforma di crowdfunding per sostenere le attività nel triennio 2017/20 Occorreva quindi un metodo sicuro e verificato per comunicare i dati dei donatori dalla piattaforma di crowdfunding a PIF per eseguire alcune operazioni a valle. Come?
  25. 25. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study Programma il Futuro è il progetto del CINI e del MIUR in collaborazione con Code.org per la diffusione del pensiero computazionale in Italia. Nell’anno scolastico 2016/17 sono stati coinvolti 1’600’000 studenti TIM in qualità di partner del progetto ha fornito a Programma il Futuro la sua piattaforma di crowdfunding per sostenere le attività nel triennio 2017/20 Occorreva quindi un metodo sicuro e verificato per comunicare i dati dei donatori dalla piattaforma di crowdfunding a PIF per eseguire alcune operazioni a valle. Come?
  26. 26. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study
  27. 27. JWT: JSON Web Tokens /> Riferimenti JWTRiferimenti JWTJWT: JSON Web Tokens /> Riferimenti JWTRiferimenti JWT ● Specifiche JWT → RFC7119 https://tools.ietf.org/html/rfc7519 ● Debugger e classi → https://jwt.io/ LinuxDay Napoli 2017
  28. 28. JWT: JSON Web Tokens /> Riferimenti autoreRiferimenti autoreJWT: JSON Web Tokens /> Riferimenti autoreRiferimenti autore Mario Rossano aka Anak ● Web: https://netlogica.it ● Facebook: https://facebook.com/netlogica ● Twitter: https://twitter.com/Mario_Rossano ● MetaCPAN: https://metacpan.org/author/ANAK ● SlideShare: https://www.slideshare.net/Anakthewolf LinuxDay Napoli 2017
  29. 29. JWT: JSON Web Tokens /> exitexitJWT: JSON Web Tokens /> exitexit Grazie a Voi per l’attenzione al NaLUG per l’organizzazione ed alla Federico II per la consueta ospitalità :-) LinuxDay Napoli 2017

×