Sto creando un servizio web che deve essere accessibile solo per le app iOS. In futuro, desidero espandermi su un sito web mobile per rendere il mio servizio disponibile anche per altri sistemi operativi mobili.
Ora, ho tutto ciò che funziona tramite un'API. i miei utenti possono registrarsi, cercare società, ordinare prodotti da quelle società e tracciare i loro ordini. Non è ancora attivo, ma funziona ..
Sto affrontando un problema importante: come proteggerlo?
Negli ultimi giorni ho interrotto la codifica e sono costantemente stato impegnato a cercare sul Web, StackOverflow e Information Security su come farlo. Ho scoperto che il modo in cui Amazon protegge le loro API sarebbe la soluzione migliore per me. Il modo in cui Amazon protegge il suo servizio è spiegato qui . L'ho ottimizzato un po 'per il mio servizio:
- L'utente registra e ottiene la chiave API privata + chiave pubblica (identificazione)
- L'utente inserisce le credenziali e tocca "accedi". L'app crea hash delle variabili + chiave privata. L'app invia variabili + timestamp + hash + chiave pubblica all'API
- API cerca la chiave pubblica nel database, trova la chiave privata che appartiene a quella chiave pubblica (se la chiave pubblica è valida). L'API crea quindi hash nello stesso modo in cui è stata eseguita l'app. Se gli hash sono uguali, viene eseguita la richiesta (accedi in questo caso).
Questo modo di garantire un servizio ha senso per me, e posso codificarlo per lo più. ma ho un grosso problema e non riesco a trovare alcuna soluzione:
- L'utente ottiene un pubblico e amp; chiave API privata quando viene creato un account. La chiave pubblica può essere inviata dal server al dispositivo dell'utente, perché non è necessariamente un segreto. Dal momento che la chiave API privata può inviare mai tramite il cavo, come posso fare in modo che un account connesso sul dispositivo dell'utente conosca l'API privata chiave creata sul server?
Qualcuno sa come risolvere questo problema ?? qualsiasi aiuto sarebbe molto apprezzato !!