JWT con SSL ha ancora bisogno della firma HMAC o RSA o sono solo paranoico?

0

Sto cercando di implementare un sistema di autenticazione / autorizzazione usando JWT per la mia applicazione web. I client vengono forniti con un token nel solito formato JWT dal mio server una volta che presentano le credenziali che controllo sul database.

Il problema che ho pensato potrebbe sorgere è che da quello che so i token JWT non sono crittografati o firmati in alcun modo quindi potrei essere una vittima di MitM dove qualcuno sta cambiando le richieste nel mio carico utile e inviare una risposta o semplicemente rubare i dati.

Ho capito che questo problema poteva essere risolto firmando il token JWT usando HMAC o meglio usando la coppia di chiavi pubbliche / private di RSA, ma ancora una volta la chiave pubblica RSA dovrebbe avere un qualche tipo di certificato collegato perché la chiave pubblica potrebbe essere compromessa ad un certo punto .

Questo è quando mi sono chiesto: 'È davvero necessario?'. Se ricevo un certificato SSL per tutte le mie pagine e comunico i miei token attraverso di esso, dovrei firmarli anche a "livello applicazione"? Mi sembra che sto diventando paranoico pensando che il mio CA potrebbe essere compromesso e qualcuno potrebbe vedere i miei token JWT mentre vengono inviati dal server. Quali sono le possibilità che questo accada? Dovrei davvero prendermi il tempo per sviluppare un ulteriore livello di sicurezza prima di SSL, dove posso generare un token JWT per proteggerlo con una coppia di chiavi private / pubbliche RSA e poi inviarlo all'utente attraverso un canale SSL?

    
posta Stefan Idriceanu 31.01.2017 - 12:21
fonte

1 risposta

1

"Firmare" JWT non è una difesa contro gli attacchi Man-In-The-Middle. Come dici tu, l'utilizzo di HTTPS in modo che TLS / SSL utilizzi è .

L'aggiunta di un HMAC a un JWT impedisce all'utente corrente della sessione di manomettere le attestazioni.

Prendi questo:

{
  "admin": false
}

Un utente malintenzionato potrebbe essere in grado di aumentare i propri privilegi:

{
  "admin": true
}

Assicurati di avere una chiave privata strong e un token autenticato da HMAC è sufficiente. Assicurarsi che ogni JWT controlli l'autenticazione HMAC.

RSA è utile solo se devi inviare un token a un'altra parte o server e desideri risolvere il problema di distribuzione delle chiavi.

    
risposta data 31.01.2017 - 12:36
fonte

Leggi altre domande sui tag