Il token JWT deve essere memorizzato in un cookie, un'intestazione o un corpo

5

Qual è il modo più sicuro per archiviare il trasferimento e archiviare un token JWT o qualsiasi token di autenticazione in generale?

Qualcuno mi ha detto che è sicuro inviare il token di autenticazione come cookie, ma non capisco come ciò fornirebbe una sicurezza aggiuntiva semplicemente usando un cookie di ID di sessione normale per l'autenticazione, poiché il browser includerebbe quel cookie per tutti richieste in uscita comunque. Ho frainteso qualcosa?

Ciò che per me è molto più sensato è se il token fosse memorizzato in un'intestazione o un corpo di risposta, quindi estratto nel lato client a livello di codice e aggiunto manualmente a ciascuna richiesta. Non ci sarebbe modo di intercettare il token sulla connessione HTTPS e gli attacchi CSRF sono resi impossibili (io userei comunque il token CSRF). Ovviamente il token di autenticazione è ancora accessibile dall'attacco XSS, ma il cookie non è anche soggetto a questo attacco?

Non capisco in che modo il token in un cookie fornisce QUALSIASI sicurezza aggiuntiva rispetto all'autenticazione basata su un semplice cookie ID di sessione? Mi mancano alcune informazioni?

    
posta Tuomas Toivonen 20.07.2016 - 19:34
fonte

3 risposte

5

Inserendo il token nel cookie e impostando tale cookie su HttpOnly, puoi impedire l'accesso al cookie da parte dello script malevolo sul lato client (cioè XSS) - non c'è accesso a un cookie HttpOnly da JavaScript, il browser lo proteggerà e gestisci l'invio del cookie solo all'origine giusta.

link

    
risposta data 20.07.2016 - 20:49
fonte
3

Ok, iniziamo col capire cosa è JWT (citato dal loro sito web):

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

JWT.IO allows you to decode, verify and generate JWT.

L'obiettivo di JWT non è quello di nascondere i dati, ma di dimostrare la tua identità al server. Chiunque può decodificare il token, ma non può creare token falsi perché richiede la chiave segreta. Il server genererà un'eccezione quando tenterà di decodificare un token falso, poiché nessuno conosce la tua chiave privata (spero!).

Di solito, il token viene inviato nell'intestazione Autorizzazione, che assomiglia a questo:

Authorization: Bearer <the token>

E poi hai molte librerie che analizzeranno l'intestazione e estrarranno le informazioni necessarie per te, a seconda della tua lingua.

    
risposta data 20.07.2016 - 20:46
fonte
1

Come hanno detto Crovers, non puoi accedere ai cookie HttpOnly con javascript.

I don't understand how token in a cookie provides ANY additional security over authentication based on simple session ID cookie? Am I missing some information?

Non è così. Il punto di JWT non deve essere più sicuro dell'ID di sessione. Il vantaggio di JWT è che non è necessario memorizzare nulla lato server. Con l'ID di sessione è necessario memorizzare le sessioni da qualche parte, mentre con JWT i dati di sessione sono memorizzati all'interno del JWT.

    
risposta data 14.06.2018 - 14:00
fonte

Leggi altre domande sui tag