2012-01-21 2 views
9

Sono interessato al modo migliore di eseguire l'autenticazione dell'utente in un'app mobile. Al momento l'installazione è abbastanza semplice. Sto memorizzando il nome utente e la password sull'app e inviandolo all'api ogni volta che ho bisogno di eseguire una query limitata.Come inserire l'autenticazione utente in un'applicazione mobile

Questo credo sia probabilmente il modo sbagliato di fare questo.

Sarebbe un modo migliore per inviare il nome utente e la password quando l'utente effettua il login e quindi memorizza l'id dell'utente? Il problema con questo è che quindi l'API accetta un id utente e non un nome utente e una password. Un ID utente sarà molto più facile da "indovinare" e le persone malintenzionate potrebbero inviare un req all'api con azioni eseguite dall'utente id casualmente selezionate sotto il loro account. Ho una chiave API. È abbastanza sicuro?

Il problema è che voglio iniziare a integrare Twitter e Facebook oauth nell'app. Non ho letto molto a riguardo, ma penso che tu abbia un "token". Come funzionerebbe con il set up che stai suggerendo? Sarebbe utile creare un token nel mio database di utenti e utilizzare il token (che sia mio, di Facebook o di Twitter) come autorizzazione? O avrebbe senso tenere separati ogni servizio e trattarli separatamente?

Grazie.

risposta

8

Il modo corretto sarebbe generare un token di autenticazione sul server quando l'utente registra e invia questo token nella risposta di login. Quindi questo token viene utilizzato nelle richieste successive.

Ciò significa che il server deve tenere traccia dei token di autenticazione generati. Puoi anche tenere traccia dei tempi di creazione dei token e far scadere i token dopo un po 'di tempo.

Il token deve essere una stringa casuale sufficientemente lunga, in modo che non possa essere facilmente indovinata. Come fare questo è stato risposto prima: How to generate a random alpha-numeric string?

Personalmente preferisco l'approccio UUID.

Aggiornamento:

Questo problema è stato già risolto nei browser web, tramite i cookie e le sessioni. Puoi riutilizzare questo meccanismo nelle tue richieste Android (anche se alcuni puristi di REST smentiscono questo approccio):

  1. Abilitare le sessioni sul server.

  2. Quando utente accede a un server aggiungono alcuni dati alla sessione, per il tempo di login esempio:

    request.getSession().setAttribute("timeOfLogin", System.currentTimeMillis()); 
    
  3. Dal sessioni sono attivate, è inoltre necessario abilitare il supporto per i cookie nei tuoi HttpClient richieste: Using Cookies across Activities when using HttpClient

  4. Ogni volta che viene effettuata una richiesta, il server deve verificare se la sessione contiene l'attributo timeOfLogin. Altrimenti dovrebbe restituire la risposta HTTP 401.

  5. Quando l'utente si disconnette, chiama l'url di logout del server e cancella i cookie sul client.

+0

Ok, quindi generare un token è la strada da percorrere. Wicked! :) Grazie –