2013-01-22 8 views
19

Vorrei creare una piccola app mobile (Android e iOS) e un piccolo server di backend con AEST REST.Fornire l'autenticazione di Facebook protetta con il mio server

Gli utenti della mia app (Android o iOS) devono effettuare l'accesso su Facebook. Lo faccio utilizzando Facebook sdk mobile. Quando il login è andato a buon fine, Facebook sdk restituirà un authentificationToken, che ora si trova sullo smartphone degli utenti.

L'idea è la seguente: Ogni volta che la mia app ha bisogno di alcuni dati, l'app collegherà al mio server backend (REST) ​​su HTTPS. Ad esempio: l'app effettua un semplice HTTP GET e passa l'autenticazione di Facebook recuperata. Il mio server ottiene questa autenticazione di Facebook e usa questo token per determinare se l'utente è autenticato e recuperare le informazioni del profilo di Facebook (nome, cognome, ecc.). Quindi il server contatta anche Facebook e genera la risposta personalizzata per la richiesta HTTP GET.

Le mie domande sono:

  1. E 'davvero sufficiente a passare questo token facebookAuthentication per ogni chiamata API REST, per rendere il server recuperare l'utente facebook associato corretta?
  2. Io uso HTTPS, quindi suppongo, la connessione sia sufficientemente crittografata, giusto?
  3. Suppongo di aver bisogno di un meccanismo di firma quindi firmare ogni chiamata API REST (su HTTPS) per garantire che il token di FacebookAuthentication sia stato inviato solo dalla mia app mobile. Lo farei utilizzando RSA con SHA-1 per firmare qualsiasi chiamata API REST. Ma il problema con questo approccio è che il client deve memorizzare la chiave privata da qualche parte nell'app (per le richieste di firma) e il server conosce la chiave pubblica (per la corrispondenza delle firme). È corretto? Se sì, credo che sia un grosso problema di sicurezza, dal momento che un'app mobile (in particolare Android) potrebbe essere decompilata per ottenere la chiave privata. Come posso conservare questa chiave privata in modo sicuro nella mia app? C'è un altro sistema per la firma che puoi raccomandare?

Bt: conosci una buona libreria RSA per iOS e Android?

risposta

8

1) Sì. È abbastanza. Se il tuo cliente (app per dispositivi mobili) ha un token, dimostra che un utente è stato autenticato su Facebook. Quindi, hai autenticato un utente in questo modo. Tuttavia, non è sufficiente autenticare un'app mobile (su questo, parlerò al n. 3).

2) Sì. È crittografato in entrambi i modi.

3) È difficile. Si chiama attestato remoto. Ci sono MOLTI problemi con questo.

Prima di andare in questa direzione, è necessario porsi due domande

  • chi stai proteggendo contro?

  • Quanto sono disposto a investire?

Se si stanno proteggendo se stessi contro uno studente con conoscenza molto limitata, che può scrivere un'altra applicazione per cellulare che utilizzerà il server allora si sta bene con una firma.

Se si sta proteggendo da un pò più sofisticato software engineer (che può decodificare la propria applicazione), non sarà sufficiente. Questo ingegnere può estrarre una chiave privata dall'applicazione e utilizzarla per firmare le richieste nella sua applicazione.

È possibile leggere sull'attestato remoto here e here.

Le soluzioni che possono proteggervi dal semplice reverse engineering sono piuttosto complesse.

P.S. Per quanto riguarda la libreria RSA.

Guardate questo per Android:

Asymmetric Crypto on Android

E questo per iOS

RSA Encryption using public key

Problemi correlati