In primo luogo, alcune cose:
- Non esiste un segreto condiviso nella risposta di Thomas Pornins alla domanda collegata. Il server utilizza un segreto che solo conosce per calcolare l'HMAC. Il client ottiene quindi HMAC e lo invia al server su ogni reqeust come token di autenticazione. Il server può controllarlo ricalcolandolo con i server segreti. Si noti che il client non calcola mai un HMAC.
- Piuttosto che implementarlo tu stesso, probabilmente vorrai utilizzare una soluzione esistente, come JWT.
Tuttavia, HMAC o JWT o qualsiasi altra cosa deve essere mantenuta sul lato client sicuro. Personalmente, l'ho messo nella memoria locale ma un cookie potrebbe funzionare anche. Li domini perché sono vulnerabili alle "perdite". Potrebbe essere vero che il malware eseguito come root o qualcuno con accesso fisico potrebbe rubarli. Questo è un rischio. Ma ecco il punto: tutto il sistema di accesso, dagli ID di sessione vecchio stile ai JWT moderni, funziona lasciando che il cliente memorizzi un segreto. Se non è possibile accettare tale rischio, non è possibile avere accesso e sarà necessario che l'utente ridigita la password su ogni richiesta. (Ma chi lo sa, il malware che può leggere lo storage locale potrebbe potenzialmente leggere anche le battiture ...)
Non sei sicuro di cosa intendi con l'utilizzo di un nuovo segreto per ogni round trip, ma non è stato in grado di risolvere il dilemma di cui sopra. Alla prima richiesta, il client autentica se stesso con una password e ottiene un segreto che può utilizzare per l'autenticazione futura in cambio. Alla richiesta successiva, il client deve autenticarsi di nuovo. O ha salvato il segreto e può usarlo. Oppure no, e quindi l'utente deve ridigitare la password.