SlideShare ist ein Scribd-Unternehmen logo
1 von 29
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
{
"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
● È 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’è?
● È 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?
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”
}
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”
}
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
Il token completo è quindi del tipo seguente:
JWT: JSON Web Tokens /> come è fatto? >come è fatto? > risultatorisultatoJWT: JSON Web Tokens /> come è fatto? >come è fatto? > risultatorisultato
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
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...
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
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
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
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
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
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
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
JWT: JSON Web Tokens /> è sicuro? MACè sicuro? MACJWT: JSON Web Tokens /> è sicuro? MACè sicuro? MAC
Flusso di un MAC
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
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/
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.
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
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
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?
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?
JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study
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
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
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

Weitere ähnliche Inhalte

Ähnlich wie JWT: JSON Web Tokens - bye bye Session and Cookie - RFC7519

SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveAlessio Iafrate
 
Nat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazioneNat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazioneGiuliano Latini
 
Internet-of-things, sicurezza, privacy, trust
Internet-of-things, sicurezza, privacy, trustInternet-of-things, sicurezza, privacy, trust
Internet-of-things, sicurezza, privacy, trustDavide Carboni
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoMavigex srl
 
BlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuitoBlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuitoNinja Academy
 
XMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANTXMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANTLuca Congiu
 
iDialoghi: L'alba dell'IPv6: opportunita' e problemi
iDialoghi: L'alba dell'IPv6: opportunita' e problemiiDialoghi: L'alba dell'IPv6: opportunita' e problemi
iDialoghi: L'alba dell'IPv6: opportunita' e problemiiDIALOGHI
 
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side JavascriptMatteo Napolitano
 
Java Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoJava Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoMassimiliano Dessì
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8DotNetCampus
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...DrupalDay
 

Ähnlich wie JWT: JSON Web Tokens - bye bye Session and Cookie - RFC7519 (20)

SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di Cognitive
 
Nat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazioneNat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazione
 
Internet-of-things, sicurezza, privacy, trust
Internet-of-things, sicurezza, privacy, trustInternet-of-things, sicurezza, privacy, trust
Internet-of-things, sicurezza, privacy, trust
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
 
BlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuitoBlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuito
 
XMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANTXMASDEV 2018 - XMAS GIFT ASSISTANT
XMASDEV 2018 - XMAS GIFT ASSISTANT
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Node and the Cloud
Node and the CloudNode and the Cloud
Node and the Cloud
 
Html5
Html5Html5
Html5
 
iDialoghi: L'alba dell'IPv6: opportunita' e problemi
iDialoghi: L'alba dell'IPv6: opportunita' e problemiiDialoghi: L'alba dell'IPv6: opportunita' e problemi
iDialoghi: L'alba dell'IPv6: opportunita' e problemi
 
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
 
Mobile e Smart Client
Mobile e Smart ClientMobile e Smart Client
Mobile e Smart Client
 
Java Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoJava Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi Massimiliano
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8
 
Blockchainvis Backend
Blockchainvis BackendBlockchainvis Backend
Blockchainvis Backend
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
 
HTML5 Security
HTML5 SecurityHTML5 Security
HTML5 Security
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
 

Mehr von Mario Rossano

Webinar 2020.04.07- Pillole di sicurezza digitale
Webinar 2020.04.07- Pillole di sicurezza digitaleWebinar 2020.04.07- Pillole di sicurezza digitale
Webinar 2020.04.07- Pillole di sicurezza digitaleMario Rossano
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceMario Rossano
 
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...Mario Rossano
 
Department of Chemical Sciences Federico II Naples - 09.01.2014
Department of Chemical Sciences Federico II Naples - 09.01.2014Department of Chemical Sciences Federico II Naples - 09.01.2014
Department of Chemical Sciences Federico II Naples - 09.01.2014Mario Rossano
 
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNACodemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNAMario Rossano
 
La crittografia frattale in Perl
La crittografia frattale in PerlLa crittografia frattale in Perl
La crittografia frattale in PerlMario Rossano
 

Mehr von Mario Rossano (7)

Webinar 2020.04.07- Pillole di sicurezza digitale
Webinar 2020.04.07- Pillole di sicurezza digitaleWebinar 2020.04.07- Pillole di sicurezza digitale
Webinar 2020.04.07- Pillole di sicurezza digitale
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
 
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
 
Department of Chemical Sciences Federico II Naples - 09.01.2014
Department of Chemical Sciences Federico II Naples - 09.01.2014Department of Chemical Sciences Federico II Naples - 09.01.2014
Department of Chemical Sciences Federico II Naples - 09.01.2014
 
Pit2012 modern perl
Pit2012 modern perlPit2012 modern perl
Pit2012 modern perl
 
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNACodemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
 
La crittografia frattale in Perl
La crittografia frattale in PerlLa crittografia frattale in Perl
La crittografia frattale in Perl
 

Kürzlich hochgeladen

GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneServizi a rete
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptxfilippoluciani9
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxtecongo2007
 
GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO AntonioServizi a rete
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroServizi a rete
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaServizi a rete
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleServizi a rete
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoServizi a rete
 

Kürzlich hochgeladen (9)

GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptx
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptx
 
GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO Antonio
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI Alessandro
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA Roberto
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
 

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

  • 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. { "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. ● È 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. ● È 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. JWT: JSON Web Tokens /> è sicuro? MACè sicuro? MACJWT: JSON Web Tokens /> è sicuro? MACè sicuro? MAC Flusso di un MAC
  • 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. 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. 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. 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. 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. 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. 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. JWT: JSON Web Tokens /> case studycase studyJWT: JSON Web Tokens /> case studycase study
  • 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. 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. 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