No, non va bene per alcuni tipi di servizi.
Implementazione
1.
In seguito alla connessione dell'utente con la password di accesso, generare una chiave derivata dalla propria password per crittografare i dati per questo utente e mantenerlo in una sessione sul server.
In questo modo, ogni utente avrà una chiave univoca. Questa chiave derivata non deve essere reversibile, questo è il punto principale. L'utilizzo di hash_mac o di un altro metodo di hashing con sale e / o chiave master lo consentirà.
2.
Utilizzare questa chiave per crittografare il segreto dell'API generato utilizzando AES 256 con un iv casuale per ciascun utente.
O
2.bis Usa questa chiave per generare la vera chiave di crittografia all'ultimo momento e crittografare il metodo API usando lo stesso metodo di 2. per evitare di memorizzare password mobili.
3. Memorizza l'iv nella base dati insieme all'ID utente e all'ID app in una tabella dedicata
4. Archivia il segreto API crittografato nel database nella tabella appropriata.
Utilizzo
Ora quando l'utente si connette al suo pannello di controllo è possibile ricreare la chiave, recuperare iv, decifrare il segreto dell'API per questo utente e visualizzarlo in testo non crittografato. Puoi anche visualizzare la chiave e chiedere entrambi quando effettui la chiamata API in modo da poter verificare il Segreto dell'app.
Se si desidera evitare di visualizzare la chiave e non doverla richiedere alla chiamata API, è possibile utilizzare anche per l'autenticazione lo stesso metodo utilizzato per l'accesso. Il che significa che puoi creare un'altra tabella per memorizzare una chiave / sale casuale per ogni app del client e memorizzare una versione hash_mac del segreto dell'API. Pertanto, solo l'ID API e il segreto dell'API sono necessari per autenticare la richiesta dell'API. ma è più lavoro.
Nota
Questo è praticamente lo stesso di @Polynomial answer.
In questo modo è molto molto difficile per qualcuno hackerare il tuo server e il tuo database per rubare le credenziali degli utenti e fare call api per loro conto. Ora puoi valutare che se una richiesta è stata accettata da un client API è il client giusto o è la loro perdita.
Se l'utente perde la sua password, rigenererai un nuovo segreto e chiave API dalla sua nuova password.