L’applicazione su cui lavoro è un monolite col frontend e il backend nello stesso progetto, fatti rispettivamente con Angular 8 e Spring Boot; l’autenticazione, quindi, è gestita interamente dal backend tramite cookie.

Quando un utente accede tramite Google Sign-in, Spring Boot gli setta un cookie col JSESSIONID e uno col token XSRF, che poi verranno passati anche per ogni richiesta ajax del frontend.

Ora, per una serie di motivi abbiamo deciso di spostare il frontend in un’applicazione separata e lasciare il backend a esporre solo un’API REST: sembra facile, ma nel momento in cui le due applicazioni sono su due domini diversi il backend non può più settare dei cookie ad uso del frontend.

Serve un’altra soluzione.

Il flusso di login da implementare, quindi, è una cosa così:

Il frontend effettua l’autenticazione con Google Sign-in e passa i dati ricevuti da Google a un endpoint del backend, che li valida sia nuovamente con l’autenticazione di Google che col proprio DB, per verificare che l’utente che sta accedendo sia effettivamente un utente valido per entrambi.

Fatto questo, l’endpoint restituisce al frontend un token JWT, che quest’ultimo userà per autenticare tutte le richieste successive.

Come si fa tutto ciò? È relativamente facile, ma ci sono un paio di gotcha a cui stare attenti che rischiano di rendere tutto piuttosto fastidioso, dato che quando c’è qualcosa che non va il massimo che potete sperare di ottenere è un poco chiarificatore HTTP 403.

Dato che ci sono diversi pezzi coinvolti e fare tutto in un muraglione di testo diventerebbe troppo noioso e impossibile da seguire, ho deciso di dividere il post in una serie di puntate, anche per creare più suspence, per cui per oggi basta così: nella prossima puntata vedremo la parte di autenticazione con Google nel frontend.

Avanti allora: Parte 1 – Google login con Angular.

Categorie: Nerd

4 commenti

Autenticazione via token JWT con Angular e Spring Boot: parte 1, Google login con Angular - Raibaz. · 9 Ottobre 2019 alle 9 h 51 min

[…] Nella puntata precedente abbiamo descritto il flusso che abbiamo in mente di implementare per separare il frontend e il backend dell’applicazione su cui lavoro e renderli indipendenti. […]

Autenticazione via token JWT con Angular e Spring Boot: parte 2, configurazione di Spring Boot - Raibaz. · 9 Ottobre 2019 alle 13 h 47 min

[…] questo è il terzo post di una serie che inizia qui e prosegue […]

Autenticazione via token JWT con Angular e Spring Boot: parte 3, generazione del token JWT - Raibaz. · 11 Ottobre 2019 alle 10 h 12 min

[…] è il quarto post di una serie che inizia qui e prosegue qui e […]

Aggiornamenti automatici delle applicazioni Angular con service worker - Raibaz. · 23 Ottobre 2019 alle 9 h 43 min

[…] Nel lungo post precedente abbiamo visto come fare per spacchettare in due un monolite e rendere autonoma la single page application, sviluppata con Angular 8, che costituisce il frontend del progetto su cui lavoro. […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *