2015-07-30 28 views
9

Stavo esaminando le domande ma non ho trovato nulla che potesse risolvere il mio dubbio. Ho trovato informazioni dettagliate su JWT, ma non molto quando si confrontano i vantaggi che JWT potrebbe offrire rispetto alla generazione di un token personalizzato per le richieste di autenticazione rispetto ai servizi REST.JWT (token Json Web) Vs Token personalizzato

Qual è il vantaggio di utilizzare un JWT (Token Web JSON) per generare un token di generazione personalizzato? Per generare il token personalizzato, potrei usare una strategia di hashing o un generatore di numeri casuali univoci.

Se si genera un token personalizzato, potrei avere problemi di sicurezza? Consiglieresti di utilizzare qualsiasi altro mecanismo di autenticazione?

Grazie!

+0

Ciao Deibys, ho la stessa domanda, hai trovato una risposta convincente e quale approccio hai applicato alla fine? grazie –

risposta

8

JWT tokens contiene attestazioni, che sono dichiarazioni sull'argomento (ad esempio l'utente che ha effettuato l'accesso). Queste dichiarazioni possono essere come nome, email, ruoli, ecc. I token JWT sono firmati digitalmente e non vulnerabili agli attacchi CSRF.

Queste due caratteristiche assicurano che il servizio che riceve il token non debba tornare al server di autenticazione di emissione per verificare la validità del token o ottenere informazioni sull'argomento.

Ciò aumenta la capacità di un sistema che utilizza token JWT di ridimensionarsi in modo significativo. I token JWT richiedono un canale di trasporto sicuro (HTTPS).

Lo svantaggio di questo è che i token non possono essere revocati (poiché non esiste un server centrale che protegga questi token). Ecco perché i token hanno in genere una vita breve.

I token in possesso di un session id d'altra parte devono contattare il server di autenticazione per convalidare il token (di solito ricerca del database) e recuperare informazioni sull'argomento (un'altra ricerca nel database).

La convalida di HMAC tokens richiede la conoscenza della chiave segreta utilizzata per generare il token. In genere il servizio di ricezione (la tua API) dovrà contattare il server di autenticazione in quanto quel server è dove viene conservato il segreto.

I token HMAC e gli ID di sessione sono in genere memorizzati nei cookie. I cookie non possono essere utilizzati per le chiamate di servizio tra domini e devono essere protetti dagli attacchi CSRF.

+3

JWT non fornisce alcuna misura contro CSRF né attacchi XSS. La firma è una misura contro la manomissione del token. Il token può ancora essere rubato anche se è firmato. Stormpath ha un buon articolo che descrive dove è necessario memorizzare i token JWT e come proteggere contro CSFR e XSS. https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –

+4

I token JWT non proteggono contro CSRF, ma sono generalmente utilizzati in un portatore schema di autenticazione Lo schema di autenticazione del portatore non è vulnerabile a CSRF. Ho letto l'articolo di Stormpath, ma non sono d'accordo con i loro consigli.Memorizzare i token JWT in un cookie rende più difficile per i client non di browser consumare la tua API e rende difficile avere le tue API in domini diversi. – MvdD

+0

Se voglio rendere l'applicazione indipendente dal canale, penso che l'uso dei cookie non sia una decisione saggia, ho sentito che alcuni dispositivi mobili hanno problemi con i cookie. A seconda dell'applicazione client, decideranno come memorizzare il token (per l'applicazione browser, suppongo che l'opzione di memorizzazione della sessione Web html5 sia l'opzione). Ora, ho bisogno di invalidare i token per necessità, quindi dal lato server, avrò bisogno di avere qualche datastorage per loro. Pensi che sia ok salvarli in un database? – Deibys

1

Da Django REST framework documentation,

JSON Web Token è un nuovo standard che può essere utilizzato per l'autenticazione basata su token. A differenza dello schema TokenAuthentication integrato, l'autenticazione JWT non ha bisogno di utilizzare un database per convalidare un token.