Ho un'applicazione web in cui gli utenti possono accedere. A causa di vincoli tecnici, l'applicazione non è autorizzata a memorizzare alcuna informazione di sessione sul disco.
Per identificare le richieste dallo stesso utente senza memorizzare le sessioni su disco, ho ideato il seguente schema:
L'applicazione ha un lungo S segreto lato server generato casualmente, creato al momento dell'installazione. C'è un utente con un nome utente u e una password p .
Per accedere, l'utente presenta (u, p) all'applicazione web per l'autenticazione al tempo t . Se l'autenticazione ha esito positivo, invia un cookie c nella risposta, contenente Encrypt (u || t, S) . Encrypt in questo caso è AES-256 in modalità operativa CBC.
Successivamente, quando arriva una richiesta contenente c , l'applicazione decodifica il contenuto di c con S per ottenere u e t . Ovviamente, se u non è un utente valido, la richiesta viene respinta. Inoltre, la richiesta viene rifiutata se la differenza tra l'ora corrente e t è maggiore di x . Rifiutare la richiesta comporta chiedere al cliente di eliminare c e reindirizzare l'utente alla pagina di accesso.
Se l'utente invia una richiesta al momento t + y , ad esempio k < = y < = x , l'applicazione aggiorna c aggiornandolo a Encrypt (u || t + y, S) . k viene scelto come valore appropriato, come x / 3 .
La disconnessione implica semplicemente chiedere al browser di eliminare c .
Questo metodo di autenticazione è sicuro?