Così come hai descritto, una "Hybrid Authentication" è una soluzione intermedia tra pura autenticazione lato server e pura client-side. Ciò significa che tutte le attività necessarie per ottenere un'autenticazione completa avranno bisogno sia del server che del client.
Ecco come si verifica un'autenticazione lato server:
- fai clic sul pulsante di accesso
- ottieni il dialogo di consenso per chiedere il tuo permesso
- devi specificare un (reindirizzamento URI)
-
ottieni 2 cose:
1- get reindirizzato all'URI di reindirizzamento
2- ottieni un codice aggiunto all'URI di reindirizzamento (token ID utente)
-
sostituisci il (token ID utente < - > Token di accesso, token di aggiornamento) dal server di autorizzazione di google #NOT SECURE
Ecco come si verifica un flusso di codice monouso:
- fai clic sul pulsante Accedi (una variabile di stato viene creata in background)
- ottieni il dialogo di consenso per chiedere il tuo permesso
- devi specificare un (reindirizzamento URI)
-
ottieni 2 cose:
1- viene reindirizzato all'URI di reindirizzamento (la variabile #State viene reindirizzata con te)
2- ottieni un codice aggiunto all'URI di reindirizzamento (token ID utente)
-
ti scambi quel codice con il tuo server #VERY SECURE
(Consegnate la variabile di stato code + e il server confronta quella variabile di stato con quella che ha già) #NO CSRF
- server scambia il (token ID utente < - > Token di accesso, token di aggiornamento) dal server di autorizzazione google
Quindi questo scambio qui è immune ad entrambi gli attacchi di replay e non fornisce un MITM con alcuna informazione utile, perché anche se l'attaccante ha intercettato qualsiasi pacchetto, dovrà comunque ottenere quella variabile di stato ed elaborare il codice aggiunto attraverso il server. In contrasto con la pura implementazione lato server dove tutto ciò che l'utente malintenzionato deve fare è inviare il codice a google in cambio con il token di accesso e il token di aggiornamento.
Ecco anche una foto per mettere le cose in prospettiva, sperando che la differenza ora sia più chiara.