Come proteggere Spring Boot con autenticazione e autorizzazione JWT
Ciao studenti, qui impareremo l'implementazione della sicurezza primaverile con spring boot3.0 e JWT. Questo è in continuazione con Spring Security parte 1: link in cui abbiamo discusso dell'implementazione basata sui ruoli di sicurezza di Spring, in questo discuteremo come implementare JWT.
JWT (JSON Web Tokens) è uno standard per rappresentare le attestazioni in modo sicuro tra due parti. È un mezzo compatto e sicuro per gli URL per rappresentare i crediti da trasferire tra due parti. Un JWT è composto da tre parti: un'intestazione, un payload e una firma.
L'intestazione è composta da algoritmo e tipo di token, il payload è costituito da soggetto, nome, data di emissione, Verifica firma è la combinazione di intestazione codificata, payload e chiave segreta. Il token JWT è una combinazione di questi tre
Spring Security può essere integrato con JWT per proteggere le applicazioni Web generando, analizzando e convalidando JWT.
Di seguito è riportata una panoramica del funzionamento dell'autenticazione e dell'autorizzazione JWT in Spring Boot :
- Autenticazione utente: quando un utente accede al sistema, il server verifica le credenziali dell'utente, come nome utente e password. Se le credenziali sono corrette, il server genera un JWT per l'utente e lo restituisce al client.
- Creazione JWT: il server crea un JWT codificando le informazioni sull'identità dell'utente e altri dati necessari, come l'ora di scadenza, in un oggetto JSON. L'oggetto JSON viene quindi firmato utilizzando una chiave segreta o una coppia di chiavi pubblica/privata.
- Archiviazione token: il client archivia il JWT localmente, in genere in un cookie o in un archivio locale.
- Autorizzazione: per ogni richiesta successiva, il client invia il JWT nell'intestazione della richiesta. Il server verifica la firma del JWT e ne decodifica il contenuto per estrarre le informazioni sull'identità dell'utente e altri dettagli. Sulla base di queste informazioni, il server può quindi autorizzare l'utente ad accedere a determinate risorse o eseguire determinate azioni.
- Convalida del token: il server può anche convalidare il JWT per garantire che non sia stato manomesso e non sia scaduto. Se il token non è valido, il server può rifiutare la richiesta o richiedere all'utente di accedere nuovamente.
Passaggio 1: aggiungere le dipendenze JWT
Passaggio 2: creare un endpoint per autenticare e generare JWT
Nel metodo CreateToken, stiamo creando token impostando attestazioni, oggetto, data di emissione e scadenza, firma.
Passaggio 3: creare un filtro per convalidare JWT
creare una classe per il filtro ed estenderla con OncePerRequestFilter, eseguire l'override del metodo doFilterInternal e richiamare il token di autorizzazione dall'intestazione. Convalida il token estraendo il nome utente e la data di scadenza dal token. Questo filer viene utilizzato per convalidare il token JWT per ogni chiamata API.
Passaggio 4: aggiungi la configurazione per autorizzare le chiamate API
Crea una classe e aggiungi un metodo per autorizzare, nel codice sopra dato l'accesso agli endpoint "/products/new","/products/authenticate" a tutti gli utenti, per l'endpoint "/products/**" solo gli utenti autenticati con JWT valido possono accesso.
Testare l'implementazione
Autenticazione e generazione del token
Copia il token generato e aggiungilo ad un'altra chiamata API, sto accedendo all'API sottostante con le credenziali di amministratore
Se proviamo ad accedere all'API con le credenziali di amministratore a cui solo l'utente può accedere, verrà visualizzato l'errore 403 Forbidden
Nota: se desideri il codice github funzionante di questa implementazione, seguimi e commenta il tuo ID e-mail. Invierò il link del codice sorgente alla tua email.
Parte 1: accesso basato sui ruoli di Spring Security con Spring Boot
Fare riferimento ai collegamenti per altri concetti di Spring Boot:
Tutorial AOP primaverile
Esercitazione sulla registrazione dell'avvio di primavera
Configurazione centralizzata in Spring Boot
Annotazioni Hibernate più comunemente utilizzate
Importanti modelli di progettazione di microservizi per le interviste