Qual è il vantaggio di JWT se l'utente deve inviare le sue credenziali una volta in ogni caso?

2

I token JWT sembrano un'ottima idea. Puoi inviare una richiesta ad alcune API senza utilizzare la coppia segreta nome utente / password.

Tuttavia, non comprendo appieno i benefici che offre. Ho due domande:

  1. Per ottenere il token, l'utente deve comunque inviare le sue credenziali ad alcuni server che emettono questi token. Non è un punto debole di tutto questo?
  2. Se l'attaccante ruba il token mentre viene trasferito, può usarlo per fingere di essere qualcun altro. L'unica differenza tra questo e l'utilizzo della combinazione utente / password è che i token JWT scadono dopo un certo periodo di tempo, quindi l'attaccante non ha molto tempo per fare le sue cose.

La mia comprensione è corretta? Cosa mi manca? Quali sono i reali vantaggi dell'utilizzo di JWT vs utente / password?

    
posta Loreno 19.08.2018 - 19:36
fonte

2 risposte

7

Supponiamo che ci siano 2 server: TRUSTED (ad esempio Google) e UNTRUSTED (qualsiasi sito che consente 'Accedi con Google' ).

Non voglio inviare il mio TRUSTED nome utente e password a UNTRUSTED . Inoltre, non desidero creare un nome utente e una password separati per UNTRUSTED .

Quindi, invece, ottengo TRUSTED per autenticarmi e invio un JWT firmato contenente la mia identità a UNTRUSTED per dimostrare chi sono. UNTRUSTED può controllare se il JWT proviene realmente da TRUSTED verificando la firma JWT utilizzando la chiave pubblica TRUSTED (se l'algoritmo di firma utilizza chiavi pubbliche / private, ad esempio RS256).

Le JWT possono essere rubate in transito, così come i nomi utente e le password, quindi questo è un rischio reale (anche se, come hai detto, le JWT scadranno prima). HTTPS ridurrà al minimo il rischio crittografando i dati in transito.

Un altro vantaggio importante dell'utilizzo di JWT è che la verifica di una firma è spesso più veloce di controllare un token di accesso su un database (a causa del database e dell'archiviazione tempo di accesso ).

    
risposta data 19.08.2018 - 20:46
fonte
2

Ti manca un punto; nella maggior parte delle architetture API il server non mantiene una sessione delle diverse chiamate effettuate dallo stesso client, questo è descritto come server stateless , motivo per cui il client deve fornire un token di autenticazione su ogni richiesta e qui dove JWT viene a portata di mano.

... the main reason why is better to use a token instead of account_id/password is to avoid frequent circulation of the password over the wire. Remember The stateless nature of API, it makes the client to provide credentials on each request.

( link )

    
risposta data 19.08.2018 - 21:34
fonte

Leggi altre domande sui tag