2010-10-10 12 views
13

Attualmente sto pensando a come proteggere la mia API REST che viene utilizzata solo dalla mia applicazione mobile per essere utilizzata da altre applicazioni? Una chiave API può essere una buona soluzione, perché solo io conosco la chiave API segreta. Esiste una soluzione migliore?Come proteggere un'API REST privata

+0

Potrebbe chiarire se si desidera (a) assicurarsi che solo l'utente (o gli utenti autorizzati) possano utilizzare il servizio o (b) per assicurarsi che solo l'applicazione client possa utilizzare il servizio? – Bruno

+0

Mi assicurerò che solo la mia applicazione client possa utilizzare il mio servizio. – LeonS

+0

Ho pensato che l'intero punto di REST era che non c'era bisogno di un'API? (Come RPC ...) – Anders

risposta

3

Utilizzare l'autenticazione HTTP. REST si basa sull'utilizzo delle funzionalità disponibili in HTTP, quindi è necessario utilizzare l'autenticazione HTTP nativa. Con l'autenticazione di base dovrai comunque utilizzare HTTPS. Se non è possibile farlo, utilizzare HTTP digest auth o NTLM.

Tutti hanno punti di forza e di debolezza diversi e non tutti possono essere supportati dal server HTTP e dalla libreria client.

+0

Quindi, se utilizzo l'autenticazione di base HTTP in combinazione con HTTPS, sono al sicuro? Soprattutto che nessuno tranne me userà la mia API? – LeonS

+0

Leon se il tuo client e il tuo server non sono entrambi dietro un firewall, devi preoccuparti del pacchetto di qualcuno che annusa la tua connessione. HTTPS crittografa la tua connessione in modo che non possa essere sniffata e Basic Authentication fornisce la chiave API che desideri. –

+0

Anche se fornisco a molti utenti username e password? Quindi ho paura che qualcun altro usi la mia API con un'altra applicazione. Posso eccetto quello con https? – LeonS

17

Leon, continui a menzionare "qualcun altro che utilizza la mia API con un'altra applicazione". Quindi, vuoi legare la tua API per essere utilizzata solo da un'applicazione? Pertanto, non si desidera concedere diritti di accesso a un utente, ma si vuole invece assegnarlo a un'istanza dell'applicazione in esecuzione sul dispositivo mobile dell'utente.

In sostanza: non ti fidi dell'utente!

Bene, in tal caso è necessario assicurarsi che l'applicazione sia closed source, è necessario codificare le credenziali nell'applicazione in modo che nessuno possa recuperarle o memorizzarle in modo appositamente crittografato dispositivo, la chiave di decodifica per essere leggibile solo dalla tua applicazione. In un certo senso, è necessario implementare una forma di DRM per impedire alle persone di fare cose con i dati sul proprio dispositivo mobile. E devi sperare che nessuno possa decodificarlo.

Se la tua app diventa abbastanza popolare/interessante, puoi contare sul fatto che le persone che sono molto, molto brave in questo genere di cose guarderanno la tua applicazione e interromperanno la crittografia prima che tu te ne accorga. Forse, se ci metti lo stesso sforzo di Skype, forse allora puoi tenerli lontani per un po '.

Ma chiediti: perché preoccuparsi? Perché non mi fido dei miei utenti? Vale veramente la pena di saltare attraverso i cerchi in questo modo per impedire ad altre applicazioni di utilizzare la mia API?

Basta guidare l'utente attraverso un processo di registrazione in cui ogni istanza dell'app ottiene una chiave univoca dal server (o una password di autenticazione HTTP unica) e la memorizza da qualche parte sul dispositivo mobile dell'utente. Quindi, per accedere alle interessanti funzionalità dell'API, richiedere la presenza di questa chiave/password. Ma non passare attraverso la massima lunghezza per offuscare o criptare la chiave quando la si memorizza localmente, non ne vale la pena. Se in seguito si rileva un uso improprio, è sempre possibile revocare comunque i diritti di accesso per un determinato account sul server.

Problemi correlati