Sto cercando un metodo relativamente semplice (da usare per il cliente) ma altamente sicuro per l'autenticazione dell'utente sulla mia API. Per sicurezza intendo autenticazione strong. L'API da costruire sarà RESTful e quindi intrinsecamente stateless.
Non voglio utilizzare l'autenticazione HTTP di base poiché la chiave deve essere passata in ogni chiamata API. Anche se l'API sarà disponibile solo tramite HTTPS, esiste sempre la possibilità di un attacco MITM a causa del fatto che il client si fida di una CA dannosa. Piuttosto un tiro lungo, ma mi piacerebbe fare questo diritto a proteggere i dati trasmessi.
La mia proposta è quella di generare una coppia di chiavi, dare la chiave privata al client e tenere il pubblico e una impronta digitale della chiave privata. Il corpo della chiamata API verrebbe crittografato con la chiave privata e l'impronta digitale verrebbe inviata.
Il server dovrebbe quindi cercare l'impronta digitale, associarlo a un account, recuperare la chiave pubblica e tentare la decrittografia. Se fallisce, agisce come se l'utente non fosse quello che dice di essere (come indicato dall'impronta digitale).
- Il mio design è sicuro?
- Ci sono alternative migliori?
- Qualsiasi consiglio / guida sarebbe molto apprezzato.