Molte API ho trovato che usando lo stesso metodo per l'autenticazione:
Signature is a HMAC-SHA256 encoded message containing nonce, customer ID (can be found here) and API key. The HMAC-SHA256 code must be generated using a secret key that was generated with your API key. This code must be converted to it's hexadecimal representation (64 uppercase characters).
Credo che per farlo funzionare, il fornitore di servizi deve mantenere una copia dell'API segreta, e quindi può controllare se l'utente ha usato lo stesso segreto per generare la firma.
Penso che sia molto insicuro, ed è come memorizzare una semplice password nel database. Chiunque abbia un vecchio backup del database ha i segreti di tutti gli utenti.
Mi manca qualcosa? C'è un metodo per il server, per verificare che l'utente abbia codificato una firma usando un segreto specifico, senza memorizzare il segreto nel database?
Per questo motivo, penso di fornire all'utente una chiave privata della coppia OpenPGP, e quindi posso convalidare la firma usando la chiave pubblica.
Pensi che ci sia un difetto di sicurezza nel modo in cui bitstamp, ad esempio, funziona, e OpenPGP sarebbe meglio?