Come proteggere Spring Boot con autenticazione e autorizzazione JWT

May 08 2023
Ciao studenti, qui impareremo l'implementazione della sicurezza primaverile con spring boot3.0 e 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.

Flusso per autenticare e autorizzare con JWT

Di seguito è riportata una panoramica del funzionamento dell'autenticazione e dell'autorizzazione JWT in Spring Boot :

  1. 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.
  2. 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.
  3. Archiviazione token: il client archivia il JWT localmente, in genere in un cookie o in un archivio locale.
  4. 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.
  5. 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

endpoint per autenticare e generare token

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

/autentica l'endpoint

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