2012-04-14 11 views
1

Ich versuche zu erstellen und Android-App, die den Benutzer authentifiziert werden muss (über einen REST-Web-Service). Die App verfügt über mehrere Aktivitäten und Bildschirme, auf denen der Benutzer angemeldet sein muss. Wenn der Benutzer angemeldet ist, kann er Beiträge auf einer Website hinzufügen und bearbeiten.Android-Authentifizierung

Ich habe gelesen, dass die Verwendung eines AndroidHttp-Clients in einem "ConnectionManager" Singleton der beste Weg wäre, dies zu tun. Aber wo würde ich die Benutzerdetails (Benutzername, Passwort) speichern, wäre das im Singleton? Sollte ich mich jedes Mal authentifizieren, wenn der Benutzer etwas bearbeiten/hinzufügen möchte?

Soll ich habe eine Klasse wie folgt aus:

public class ConnectionManager { 

    private static ConnectionManager instance = null; 
    private AndroidHttpClient client; 

    private ConnectionManager() { 
     client = AndroidHttpClient.newInstance("Android-Connection-Manager"); 
    } 

    public static ConnectionManager getInstance() { 
     if(instance == null) { 
      instance = new ConnectionManager(); 
     } 
     return instance; 
    } 

    public void authenticate(String username, String password) { 
     //Check for authentication here 
    } 
} 

und rufen Sie den Code unten jedes Mal, wenn der Benutzer etwas tut:

private static ConnectionManager conn = ConnectionManager.getInstance(); 
conn.authenticate(); 

ODER

lagere ich die Benutzer Details im Singleton

public class ConnectionManager { 

    private static ConnectionManager instance = null; 
    private AndroidHttpClient client; 

    private AppUser mLoggedInUser; 
    private boolean mAuthenticated; 

    private ConnectionManager() { 
     client = AndroidHttpClient.newInstance("Android-Connection-Manager"); 
    } 

    public static ConnectionManager getInstance() { 
     if(instance == null) { 
      instance = new ConnectionManager(); 
     } 
     return instance; 
    } 

    public void InitialiseUser(String username, String password) { 
      //Do login checks here then return true if logged in 
      mAuthenticated = true; 
    } 

    public boolean isAuthenticated() { 
      return mAuthenticated; 
    } 
} 

Antwort

2

Wenn Sie die Kontrolle über den Rest Service haben, können Sie sich mit dem Benutzernamen \ password bei der ersten Verbindung authentifizieren und dann ein "Token" an Ihre App zurückgeben, wenn die Authentifizierung erfolgreich ist.

Ihre App könnte dann dieses Token zu den HTTP-Headern aller zukünftigen Anfragen hinzufügen und Ihr Dienst könnte prüfen, ob es gültig ist, bevor Sie fortfahren.

So habe ich es gemacht und es funktioniert gut.

+0

Das scheint Sinn zu machen, ist diese Methode sicher? Und kennen Sie Beispiele dafür? – kiwijus

+0

Sie müssen SSL verwenden, um sicher zu sein, aber das gilt für jeden Dienst. Ich kenne keine dokumentierten Beispiele, aber es ist nicht schwer. – Kuffs

+0

Ja, ich dachte, es wäre wahrscheinlich in Ordnung. Ich habe gerade einen kleinen Blick gehabt und es scheint sehr einfach zu sein. Es ist nur eine Frage des Hinzufügens der Kopfzeile in der Android-App (HttpGet addheader) dann überprüfen Sie es am Web-Service Ende rechts? Ich vermisse nichts, oder? – kiwijus