Sto cercando il modo senza database per convalidare un codice segreto che è stato inviato al cellulare dell'utente dall'app web RESTful, in un processo di autenticazione a 2 fattori.
Al punto 1, l'utente fornisce nome utente e password che vengono convalidati con i dati dal database. Ora il sistema genera un codice che viene inviato al telefono dell'utente. Per comodità, il codice dovrebbe essere relativamente semplice, diciamo 5 cifre numeriche. L'utente deve fornire questo codice per completare il processo di autenticazione.
Vorrei evitare il più possibile gli accessi al database, quindi utilizzo JWT per mantenere lo stato. Ma sarebbe assurdo archiviare il codice di autenticazione segreta nel JWT, perché può essere facilmente estratto dal lato client. Pertanto, dovrebbe essere archiviato in formato hash o crittografato. Sto considerando di salare il codice segreto con sale strong (noto solo dal server) e quindi memorizzare l'hash SHA256 del risultato (hash bcrypt non va bene qui perché contiene il sale). Ciò renderebbe il codice segreto nascosto da qualsiasi sguardi indiscreti, ma comunque utile per convalidare il codice se fornito da qualcuno che lo conosce. E il server può tranquillamente dimenticare il codice nel frattempo.
Questo approccio può essere considerato sicuro per lo scopo prefissato?