2015-05-07 12 views
7

Domanda

Sono stato progettato REST API che verrà utilizzato per le app iOS e Android, e possibilmente web e altri client mobili in futuro.Come limitare l'accesso alla mia API REST ai soli client autorizzati?

Come si limita la mia intera API solo ai client (app) a cui desidero accedere? Voglio impedire a terze parti di accedere alla mia API per registrare gli utenti o anche accedere senza passare attraverso un'applicazione autorizzata (client mobile o web).

idee correnti

ho potuto dare ad ogni cliente che voglio avere l'autorizzazione di una chiave segreta, ma come faccio a impedire che questa chiave di essere estratta dal codice sorgente di mia applicazione (particolarmente facile se la mia applicazione è stata una web app)? Inoltre, se la chiave deve essere modificata in futuro (a causa di un compromesso), ciò sarebbe difficile poiché tutti i miei client dovrebbero essere aggiornati e i vecchi client non funzionerebbero. Ci deve essere una soluzione migliore.

Sto utilizzando JWT per l'autenticazione utente, ma non riesco a vedere come posso applicare questo al mio problema. Mi piace molto il modo in cui i JWT sono facilmente implementabili, quindi sarebbe fantastico se potessi applicare un'implementazione JWT per risolvere questo problema.

+0

penso che puoi farlo fornendo l'intestazione della chiave. –

+0

Chi sono i clienti autorizzati? Qualcuno con la tua chiave segreta? O qualcuno che hai già verificato (via email, oauth, ecc.)? – inmyth

+0

@inmyth Con "clienti" intendo app come app Web o app mobili. Non intendo * clienti * nel senso di * utenti *. Questa domanda non riguarda l'autenticazione dell'utente, ma piuttosto l'autorizzazione dell'app ("Questa app è autorizzata ad accedere alla mia API?"). – Sam

risposta

1

Quando si incorpora una chiave di accesso nel client, si accetta sostanzialmente che sia esposto. Le tecnologie attuali come proguard e ssl possono proteggerlo, ma non impedisce alle persone cattive di abusarne in modo legittimo (cioè attraverso l'app). È un dato di fatto che ciò vale anche nel caso in cui sia richiesta la convalida dell'utente. Quindi prevenire l'abuso è solo una metà del paradigma della sicurezza. L'altra metà è che identifica l'utente.

Detto questo non si può sperare di fare di più nell'impedire che la chiave di accesso venga violato. Tuttavia, ciò che puoi fare è ridisegnarlo sotto un'autorità che controlli dal tuo server. Un modo che conosco è il meccanismo di token. Un utente invia una richiesta con chiave di accesso e i suoi parametri del dispositivo. Una volta convalidato, gli restituisci un token con scadenza. Con questo token può quindi accedere alle tue risorse. Questo metodo offre due vantaggi:

  1. L'utente è ancora identificato dai parametri del dispositivo. A seconda di queste informazioni e della frequenza del suo accesso, puoi decidere di essere un violentatore o meno. Il token stesso scade dopo una certa durata, quindi se lo è allora puoi semplicemente rifiutargli il prossimo token.

  2. Non è necessario aggiornare la chiave di accesso.

realtà questo meccanismo è simile al Amazon Token Vending Machine che è stato sostituito dal servizio Amazon Cognito.