2016-04-07 9 views
5

Quanto è sicuro rendere JWT l'URL di attivazione nella posta elettronica?JSON Web Token (JWT) come URL per l'attivazione della posta elettronica

Ad esempio: Fai clic sul link per attivare l'account http://127.0.0.1:8000/account/activate/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0.yRQYnWzskCZUxPwaQupWkiUzKELZ49eM7oWxAQK_ZXw

+0

Questo particolare token non è sicuro, poiché il tuo segreto della firma è facilmente intuibile. – Thilo

+0

Inoltre, l'indirizzo email non deve essere incluso in una parte del JWT? O c'è qualche altro identificativo utente univoco? È "azienda: Toptal"? – Thilo

+0

ok, questo era solo un esempio che non conosco nemmeno i dati decodificati. Cosa succede se il segreto della firma è forte? è jwt come un collegamento sicuro? Menzionato qui https://github.com/dwyl/learn-json-web-tokens#q-if-i-put-the-jwt-in-the-url-or-header-is-it-secure mi ha davvero conquistato confuso. – momokjaaaaa

risposta

6

Il FAQ you link to dice:

casi d'uso per un token JWT in un URL sono: la verifica

Entrambi sono buoni candidati per i token monouso (che scadono dopo essere stati cliccati).

Quindi sì. Assicurati che ogni e-mail possa essere attivata una sola volta (e non utilizzare la terribile chiave "segreta" del tuo esempio, se la firma può essere falsificata, quindi la tua verifica può essere ignorata).

+0

Li ho letti e ho domande . Come può essere sicuro? Puoi spiegare? e come si annulla il token jwt dopo aver fatto clic/accesso all'url di attivazione? – momokjaaaaa

+0

è sicuro per esporre la firma nell'e-mail? – momokjaaaaa

+0

invalida il token: il tuo database di account saprà che l'email è già stata convalidata. Quindi un token non può essere usato due volte. – Thilo

2

L'utilizzo di token stateless come JWT è sicuro fino a quando il segreto utilizzato per firmare il token e il modo in cui viene verificato che siano sicuri. Ma ci sono alcuni aspetti aggiuntivi da considerare prima di utilizzare i JWT come auth-token nell'URI di reimpostazione della password ...

Come non è possibile invalidare una JWT specifica (senza mantenere di nuovo lo stato) e la scadenza non è sufficiente (in questo caso specifico), ciò che fondamentalmente si vuole avere è che il proprio JWT sia quello che comunemente si conosce come gettone One-Time o Single-Use. Il motivo è che probabilmente non si desidera utilizzare un singolo link di reimpostazione della password più di una volta per reimpostare una password in quanto consentirebbe a potenziali utenti malintenzionati di bloccare completamente un utente (cambiando continuamente le password).

Ho descritto come può funzionare qui: Single-Use Tokens w/ JWT - in pratica è necessario attivare un tipo di stato sul lato server (nel tuo caso, ad esempio l'hash della password dell'utente) in una chiave HMAC e utilizzarlo per firmare il token specifico dell'utente. Ciò comporterebbe il fallimento della verifica del token dopo la modifica della password ...

Problemi correlati