Come viene implementata la JWT?

4

Sto utilizzando django-rest-framework-jwt in una delle mie API. Come forse saprai, il concetto è semplice: si inviano nome utente e password e si ottiene un token indietro. Il token non è memorizzato da nessuna parte sul server.

Inviando il token nell'intestazione delle richieste successive, l'utente associato al token viene estratto dal database. Sono curioso di come questo è implementato. In che modo il server può estrarre l'utente e anche il tempo di scadenza del token semplicemente con il token?

Conosco il concetto di chiavi pubbliche / private ma se questo è implementato con la stessa idea, quale sarebbe la chiave privata e pubblica qui?

    
posta norbertpy 26.03.2015 - 23:57
fonte

1 risposta

5

Un token JWT è costituito da una stringa codificata in base64 contenente intestazione, attestazioni e firma.

La sezione reclami contiene un campo di scadenza codificato JSON, exp :

Expiration time. It contains the UTC Unix time after which you should no longer accept this token. It should be after the issued-at time.

Il nome utente può anche essere memorizzato nell'oggetto rivendicazioni.

Ci sono due opzioni relative alla "firma" del JWT:

JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA.

Con il segreto, c'è una chiave privata, tuttavia questa viene usata per autenticare il messaggio usando HMAC SHA256 . Non c'è la crittografia, solo l'autenticazione in modo che un client possa capire cosa è stato memorizzato nel token, ma non cambiarlo. HMAC è un modo per calcolare gli hash senza che siano vulnerabili a attacco di estensione della lunghezza . Non c'è una chiave pubblica in questo metodo.

Con RSA, la chiave privata viene utilizzata per firmare la chiave, che può essere verificata utilizzando la chiave pubblica quando ricevuta da un client. Pertanto, solo le chiavi che generano componenti devono conoscere la chiave privata.

Vedi Informazioni su JWT per ulteriori informazioni.

    
risposta data 27.03.2015 - 12:50
fonte

Leggi altre domande sui tag