2016-02-12 25 views
5

Ho un API con il seguente metodo:sicuro di terze parti API invita mobile app

https://api.example.com/services/dosomething 

sto fornendo questo servizio per tre diverse applicazioni mobili, ognuna con centinaia di utenti. Quando un utente effettua il login nell'app mobile, è necessario effettuare una chiamata alla mia API.

So che fornire ognuna delle tre applicazioni mobili una diversa chiave API e facendo un Authentication HTTP di base con esso non è sicuro, dal momento che l'API Key sarebbe non sicuro memorizzato nel dispositivo un chiunque può prendere e fare cattivo uso di esso.

L'approccio di OAuth2 non funziona, poiché ho solo informazioni dei miei tre clienti, non le loro centinaia di utenti.

Qual è l'approccio migliore per proteggere le chiamate alla mia API su dispositivi mobili?

risposta

5

Nel tuo caso, il tuo approccio con OAuth2 è buono: le app mobili (client) ricevono la delega dai proprietari di risorse (i tuoi utenti) per chiamare risorse protette su un server di risorse (la tua API).

Hai solo informazioni sui tuoi clienti perché OAuth2 non è dedicato all'autenticazione dei tuoi utenti ma all'autorizzazione dei tuoi clienti. I client sono identificati con un ID cliente. Nel tuo caso e se vuoi sapere quale client chiama il tuo server delle risorse, allora ogni client dovrebbe avere un ID cliente dedicato. Puoi anche identificarlo utilizzando altre informazioni come l'indirizzo IP o un'intestazione personalizzata nelle richieste che invia.

Se si desidera sapere chi sono i propri utenti, è necessario implementare l'estensione OpenID Connect. Questa estensione funziona su un server di autorizzazione basato su OAuth2. L'autenticazione dell'utente viene eseguita dal server di autorizzazione. Viene fornito un token ID con informazioni sull'utente. Il client (o l'app mobile) non deve ottenere o memorizzare le credenziali dell'utente.

C'è un excellent video where the both protocols are explained (in particolare dalle 4:44 alle 11:00).

+0

Grazie! Hai detto che OAuth2 è dedicato all'autorizzazione dei miei clienti (app mobili). Come funziona questa autenticazione? C'è una chiave API o nome utente/password per app? In tal caso, come possiamo mantenere tali informazioni private? Non ho bisogno di sapere quale utente è, ma ho bisogno di sapere quale client invia la richiesta. – Arturo

+0

Ciao. Ho aggiornato la mia risposta e ho aggiunto i dettagli. Spero ti possa aiutare –