Ho implementato un'autenticazione stateless su HTTP in Laravel, usando JWTs.
- Invio il mio nome utente / password dal frontend.
- Il server autentica l'utente, restituisce un JWT firmato con una scadenza.
- Sto utilizzando l'algoritmo HS512 per firmare con una chiave privata (disponibile solo per il server).
- Il frontend memorizza il token per richieste future.
- Il frontend invia la prossima richiesta con il token incluso.
- Il server verifica che il token sia valido e non scaduto e consente all'azione di continuare se sì a entrambi.
- Quando il token scade il server invia un messaggio di "disconnessione".
Tutte queste comunicazioni avvengono tramite HTTPS.
Quindi posso vedere che questo è sicuro da questi punti:
- Gli hacker non possono intercettare il traffico e rubare il token JWT a causa di HTTPS.
- Gli attaccanti non possono generare e inviare alcun token dispari perché il server verifica la firma usando la sua chiave privata.
- Gli utenti malintenzionati non possono modificare quale utente (e quindi, le autorizzazioni del ruolo + del richiedente) stanno effettuando la richiesta, perché fa parte della dichiarazione
sub
nel token.
Ma ho due domande :
- Che cosa succede se c'è un virus sul computer o sul cellulare dell'utente e ha rubato un token valido dalla RAM o dal browser. Può quindi inviare più richieste e saranno accettate. Esiste un modo per proteggersi da questo?
- C'è un altro modo per attaccare questo sistema che non vedo?