Come funzionano i cookie insieme al token binding?

3

L'associazione token è un meccanismo in cui il client invia un token firmato al server. Poiché questo token si basa su una chiave privata, è più difficile da rubare dei cookie di sessione. Quello che non capisco è come il token binding token funzioni insieme ai cookie di sessione.

L'associazione token l'intento di implementare dice:

With token binding, the cookie acts much like a certificate issued to the client (as opposed to a session credential), while the token-binding private key becomes the actual session credential.

È possibile utilizzare il token firmato fornito dall'associazione token come token di sessione? Avresti ancora bisogno di un cookie in quel caso? Cosa significa che il cookie agisce come un certificato?

Modifica: l'intenzione di implementare non lo dice più.

    
posta Sjoerd 29.05.2017 - 10:18
fonte

1 risposta

2

Per quanto ho capito, l'associazione token può essere utilizzata per identificare l'utente che utilizza un certificato senza necessità di PKI. Come funziona:

Il client genera una coppia di chiavi, certificato localmente, senza necessità di server di firma. Quindi, una volta connesso al server HTTPS, firma il valore tls_unique (inviato dal server durante l'handshake di tls) utilizzando la chiave privata generata, quindi "costruisce" il token costituito dal tls_unique firmato e dalla chiave pubblica. Questa informazione viene aggiunta alla richiesta HTTP come intestazione Token-Binding. Inoltre, per la prima volta, la richiesta HTTP include qualche tipo di altre informazioni di autenticazione come nome utente / password. Questo gruppo di dati viene inviato al server. Il server convalida le credenziali passate e, se è corretto, memorizza il token binding (principalmente il certificato) localmente per un'ulteriore autenticazione. Inoltre, genera il token che può memorizzare qualsiasi informazione ma memorizza anche la chiave pubblica che è stata utilizzata per firmare la richiesta di associazione. Questo token è associato al certificato specificato e identifica in modo univoco un determinato utente. E questo token viene restituito al client utilizzando un cookie.

Durante le altre richieste, non sono necessarie credenziali poiché il server ha già il certificato utente associato al token generato. Il client invia il token insieme ad un altro valore tls_unique firmato, il server controlla il token nel cookie insieme alle informazioni del Binding-Token e se conosce l'utente (il token è valido) e il certificato presentato è uguale a quello precedente l'autenticazione è stata eseguita.

In questo caso, direi che il token viene inviato dai cookie solo perché è noto un meccanismo che può essere eseguito in modo completamente automatico e il cookie è silenzioso e ben protetto. Tuttavia, si noti che il token può essere consegnato su entrambi i lati in qualsiasi altro modo, ad esempio nella richiesta GET ( link .). Questo viene utilizzato in particolare per i servizi di federazione perché il passaggio di cookie su più domini non funzionerebbe.

E riguardo le sessioni ?. Sebbene questo token possa essere utilizzato anche per identificare la sessione, non lo mescolerei. Il token viene utilizzato principalmente per l'autenticazione mentre la sessione viene utilizzata per mantenere alcune informazioni sulla sessione stateless per un certo periodo di tempo. Vorrei utilizzare l'ID di sessione separato per ogni nuova sessione che l'utente avrebbe aperto. Questo è solo il mio sentimento personale e non riesco a spiegare esattamente perché. Sicuramente, non è più necessario memorizzare le informazioni di autenticazione nella sessione poiché verranno passate con ogni nuova richiesta separatamente nelle coppie di intestazioni (Token-Binding / Cookie);)

Solo per finirlo. Non direi il cookie, ma piuttosto il token (che può essere inviato da cookie o tramite GET / POST request o dati) in realtà server come certificato client utilizzato per autenticarti, inoltre senza necessità di PKI. Perché si passa il certificato in token insieme a un dato crittografato (firmato) utilizzando il proprio server a chiave privata. Quindi il server lo usa per autenticarti.

    
risposta data 29.05.2017 - 11:51
fonte

Leggi altre domande sui tag