token JWT singolo con reclamo ID JWT

6

Sto cercando di capire come emettere un token JWT monouso per la funzione di reimpostazione della password e mantenerlo stateless. Sono stati visualizzati token monouso w / JWT che suggeriscono fondamentalmente di includere l'hash della password corrente che a sua volta viene invalidato una volta che la password è stata cambiata con successo.

Non mi sento a mio agio tra cui l'hash della password in JWT, quindi ho ricercato un po 'e ho trovato ID JWT specifica ma che richiede di memorizzare l'ID da qualche parte in modo che possa essere verificato sulla convalida del token.

Quindi la mia domanda è: quali sono i problemi di sicurezza se includo l'attuale hash della password nel token del link di reimpostazione della password che viene inviato tramite e-mail?

È meglio usare un ID JWT e aggiungerlo come colonna da qualche parte nel database invece di usare la password?

    
posta norbertpy 13.03.2017 - 20:51
fonte

1 risposta

7

Esito a rotolare la mia sicurezza, ma solo per il gusto di farlo ecco un'idea.

Invece di includere l'hash della password, segui questo processo quando generi JWT:

  1. Ottieni l'hash della password
  2. Ottieni una chiave segreta lato server (l'entropia a 256 bit dovrebbe farlo)
  3. Calcola il timestamp di scadenza, dì un'ora dall'ora corrente
  4. Crea un nuovo hash su 1 + 2 + 3
  5. Includere l'hash e la data / ora di scadenza nel JWT

Per convalidare una richiesta di reimpostazione della password:

  1. Ottieni l'hash della password
  2. Ottieni la chiave segreta lato server
  3. Leggi (e controlla) il timestamp di scadenza dal JWT
  4. Calcola un nuovo hash su 1 + 2 +3
  5. Confronta con l'hash nel JWT

In questo modo non si espone l'hash della password, e non può essere forzato brutalmente senza forzare la chiave segreta (che richiederebbe milioni di anni). Inoltre, precludi il riutilizzo dell'hash incorporando il timestamp in esso.

    
risposta data 14.03.2017 - 00:38
fonte

Leggi altre domande sui tag