2012-04-14 4 views
1

Я пытаюсь создать и приложение Android, требующее аутентификации пользователя (через веб-службу REST). Приложение имеет несколько действий и экранов, которые требуют, чтобы пользователь вошел в систему, когда пользователь может добавлять и редактировать сообщения на веб-сайте.Android Authentication

Я читал, что использование AndroidHttp Client в синглэнге «ConnectionManager» было бы лучшим способом сделать это. Однако, где бы я хотел хранить информацию о пользователях (имя пользователя, пароль), будет ли это в одиночном режиме? Должен ли я аутентифицироваться каждый раз, когда пользователь пытается изменить/добавить что-то?

Если у меня есть класс вроде этого:

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 
    } 
} 

и вызвать приведенный ниже код каждый раз, когда пользователь делает что-то:

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

ИЛИ

следует хранить пользователей детали в одиночном тоне

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; 
    } 
} 

ответ

2

Если у вас есть контроль над сервисом Rest, вы можете выполнить аутентификацию с использованием имени пользователя \ password в исходном соединении и затем вернуть «токен» в приложение, если аутентификация выполнена успешно.

Ваше приложение может затем добавить этот токен в заголовки http всех будущих запросов, и ваша служба может проверить, что это действительно, прежде чем продолжить.

Вот как я это сделал, и он работает хорошо.

+0

Это, кажется, имеет смысл, этот метод безопасен? И знаете ли вы какие-либо примеры того, как достичь этого? – kiwijus

+0

Вам нужно будет использовать SSL для обеспечения безопасности, но это верно для любой службы. Я не знаю каких-либо документированных примеров, но это не сложно. – Kuffs

+0

Да, я думал, что, наверное, все будет хорошо. Я просто немного посмотрел, и это кажется очень простым. Это просто вопрос добавления заголовка в приложение Android (HttpGet addheader), а затем проверка его на конце веб-службы вправо? Я ничего не пропустил? – kiwijus