Come funziona l'autenticazione basata su cookie?


210

Qualcuno può darmi una descrizione dettagliata di come funziona l'autenticazione basata su cookie? Non ho mai fatto nulla che implichi né autenticazione né cookie. Cosa deve fare il browser? Cosa deve fare il server? In quale ordine? Come proteggiamo le cose?

Ho letto dei diversi tipi di autenticazione e dei cookie, ma vorrei una descrizione di base su come utilizzare i due insieme: ho solo letto che sono spesso usati insieme ma non sono riuscito a trovare una descrizione di come.


Risposte:


162

Un cookie è fondamentalmente solo un elemento in un dizionario. Ogni articolo ha una chiave e un valore. Per l'autenticazione, la chiave potrebbe essere qualcosa come "nome utente" e il valore sarebbe il nome utente. Ogni volta che si effettua una richiesta a un sito Web, il browser includerà i cookie nella richiesta e il server host controllerà i cookie. Quindi l'autenticazione può essere fatta automaticamente in questo modo.

Per impostare un cookie, è sufficiente aggiungerlo alla risposta che il server invia dopo le richieste. Il browser aggiungerà quindi il cookie alla ricezione della risposta.

Esistono diverse opzioni che puoi configurare per il lato server dei cookie, come i tempi di scadenza o la crittografia. Un cookie crittografato viene spesso definito come cookie firmato. Fondamentalmente il server crittografa la chiave e il valore nella voce del dizionario, quindi solo il server può fare uso delle informazioni. Quindi i cookie sarebbero sicuri.

Un browser salverà i cookie impostati dal server. Nell'intestazione HTTP di ogni richiesta che il browser invia a quel server, aggiungerà i cookie. Aggiungerà solo i cookie per i domini che li impostano. Example.com può impostare un cookie e anche aggiungere opzioni nell'intestazione HTTP per i browser per inviare il cookie a sottodomini, come sub.example.com. Sarebbe inaccettabile che un browser invii mai cookie a un dominio diverso.


Quello che capisco è che il browser è in grado di inviare i cookie allo stesso dominio. In relazione a ciò, il browser tiene conto del sottodominio quando distingue tra due domini?
Aakash,

1
È possibile impostare le opzioni nell'intestazione HTTP per il modo in cui un browser gestisce i sottodomini.
Conor Patrick,

288

Mi rendo conto che è in ritardo di anni, ma ho pensato di poter ampliare la risposta di Conor e aggiungere un po 'di più alla discussione.

Qualcuno può darmi una descrizione dettagliata di come funziona l'autenticazione basata su cookie? Non ho mai fatto nulla che implichi né autenticazione né cookie. Cosa deve fare il browser? Cosa deve fare il server? In quale ordine? Come proteggiamo le cose?

Passaggio 1: Client> Iscrizione

Prima di ogni altra cosa, l'utente deve registrarsi. Il client invia una richiesta HTTP al server contenente il proprio nome utente e password.

Passaggio 2: Server> Gestione iscrizione

Il server riceve questa richiesta e esegue l'hashing della password prima di memorizzare il nome utente e la password nel database. In questo modo, se qualcuno accede al tuo database, non vedrà le password effettive degli utenti.

Passaggio 3: Client> Accesso utente

Ora il tuo utente accede. Fornisce il suo nome utente / password e, di nuovo, questo viene pubblicato come richiesta HTTP sul server.

Passaggio 4: Server> Convalida dell'accesso

Il server cerca il nome utente nel database, esegue l'hashing della password di accesso fornita e la confronta con la password con hash precedente nel database. In caso contrario, potremmo negare loro l'accesso inviando un codice di stato 401 e terminando la richiesta .

Passaggio 5: Server> Generazione del token di accesso

Se tutto è andato a buon fine, creeremo un token di accesso, che identifica in modo univoco la sessione dell'utente. Sempre nel server, facciamo due cose con il token di accesso:

  1. Archiviarlo nel database associato a quell'utente
  2. Allegalo a un cookie di risposta da restituire al client. Assicurati di impostare una data / ora di scadenza per limitare la sessione dell'utente

D'ora in poi, i cookie saranno allegati a ogni richiesta (e risposta) fatta tra il client e il server.

Passaggio 6: Client> Esecuzione di richieste di pagina

Di nuovo sul lato client, siamo ora connessi. Ogni volta che il client effettua una richiesta per una pagina che richiede l'autorizzazione (cioè devono essere connessi), il server ottiene il token di accesso dal cookie e lo confronta con quello nel database associato a quell'utente. Se si verifica, l'accesso è concesso.

Questo dovrebbe farti cominciare. Assicurati di cancellare i cookie al logout!


10
Grazie per la descrizione Mi chiedo solo come il token di accesso offra sicurezza? Un utente malintenzionato che ruba il cookie può rappresentare un utente registrato autenticato? O che è protetto da SSL?
Richeek,

6
@Richeek SSL protegge l'intercettazione durante le richieste / risposte, ma un utente malintenzionato potrebbe accedere ai cookie agli endpoint (ad esempio il browser). Teoricamente, potrebbero quindi rappresentare un utente connesso fino alla scadenza del cookie. Dico "teoricamente" perché l'implementazione sopra non lo gestisce. Nell'implementazione di cui sopra, l'attaccante avrà accesso fino all'aggiornamento del token di accesso nel database (ovvero al successivo accesso).
pllx

14
È possibile invalidare il token di accesso alla scadenza, magari con una "data di scadenza" nel database. Oppure, potresti prendere in considerazione l'utilizzo dei token Web JSON (JWT) , che sono come token di accesso, ma possono gestire la scadenza dei token tra le altre cose. Maggiori informazioni su JWT qui. Un utente malintenzionato avrà comunque accesso al tuo account per brevi periodi di tempo se dispone del token di accesso / JWT, quindi è necessario proteggere anche i tuoi endpoint.
pllx

3
Mi ci è voluto molto per dire grazie! Grazie per la tua spiegazione
Richeek,

4
@ManuChadha potresti, insieme al token / chiave di sessione, salvare anche l'indirizzo IP dell'utente insieme ad altri parametri identificativi come user-agent, ecc. Se la richiesta arriva con un cookie valido ma dall'ip, dal browser, ecc. Sbagliati rifiutare la richiesta e reindirizzare l'utente alla pagina di accesso per eseguire nuovamente l'autenticazione.
FalcoGer,

18

Autenticazione basata su cookie

L'autenticazione basata su cookie funziona normalmente in questi 4 passaggi:

  1. L'utente fornisce un nome utente e una password nel modulo di accesso e fa clic su Accedi.
  2. Dopo aver effettuato la richiesta, il server convalida l'utente sul back-end eseguendo una query nel database. Se la richiesta è valida, creerà una sessione utilizzando le informazioni utente recuperate dal database e le memorizzerà, per ogni sessione viene creato un ID univoco chiamato ID sessione, per impostazione predefinita ID sessione verrà fornito al client tramite il browser.
  3. Il browser invierà questo ID sessione su ogni richiesta successiva, l'ID sessione viene verificato rispetto al database, in base a questo sito Web ID sessione identificherà la sessione appartenente a quale client e quindi darà accesso alla richiesta.

  4. Una volta che un utente si disconnette dall'app, la sessione viene distrutta sia sul lato client che sul lato server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.