Sono in procinto di implementare un'API pubblica per il mio servizio web. La sicurezza è una preoccupazione fondamentale poiché il denaro è coinvolto.
Sembra che l'attuale pratica comune per "autenticare" gli utenti nelle richieste API sia confermando l'autenticità del messaggio, facendo in modo che l'utente invii un HMAC dei parametri (incluso un nonce univoco) per ogni richiesta.
Questo va bene, ma utilizza un segreto condiviso: sia il server che il client devono memorizzare la chiave privata per generare l'HMAC.
Non mi piace. Qual è il punto di andare a tutto il trambusto con le password saling / hashing, se poi sto andando a memorizzare segreti condivisi non crittografati nel database?
C'è un modo migliore? Stavo pensando di utilizzare GPG e di fornire all'utente la propria chiave pubblica GPG da memorizzare; potrebbero quindi firmare i messaggi usando la loro chiave privata. Tuttavia, temo che questo potrebbe essere un po 'un problema per gli utenti di Windows con cui giocare.
In generale, la chiave pubblica / privata non firma un modo migliore per farlo? Ci deve essere qualche ragione per cui tutti scelgono HMAC con un segreto condiviso ... cosa mi manca?
Ovviamente imporrò limiti alle interazioni con i clienti tramite API, fornirò notifiche e limiterei la rimozione di denaro dal sistema, ma si potrebbero ancora fare molti danni se i segreti condivisi fossero trapelati.