Разрешение токена для приложения для Android

Я пытаюсь использовать безопасный веб-API из своего приложения для Android. Веб-API использует базовую аутентификацию и использование маркера, сгенерированного сервером. Я смог использовать веб-API, используя curl, как показано ниже.

Во-первых, чтобы аутентифицировать пользователя и получить токен.

curl http://localhost:3000/api/api_keys -u 'user@example.com:UserPassword'

Возвращает {"token":"0d63b512573dce7be5eb53bab58a5625"}

Во-вторых, я использую токен, чтобы вызывать API как аутентифицированный пользователь.

curl http://localhost:3000/api/exams -H 'Authorization: Token token="0d63b512573dce7be5eb53bab58a5625"'

Верните соответствующий json-объект.

Проблема в том, что когда я пытаюсь вызвать веб-API от клиента Android, используя приведенный ниже код, веб-API не подбирает заголовок авторизации и поэтому выдает запрос.

 ... HttpClient client = new DefaultHttpClient(new BasicHttpParams()); HttpGet httpGet = new HttpGet(targetUrl.toString()); httpGet.setHeader("Content-type", "application/json"); httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("test-user@example.com", "Password!"), "UTF-8", false)); httpGet.addHeader("Authorization", "Token token=\"" + getToken() + "\""); try { HttpResponse response = client.execute(httpGet); ... 

Как аутентифицировать приложение Android в веб-API?

    Сначала вам нужно отправить запрос, чтобы получить токен. Затем вы можете использовать токен.

    Я заметил, что я снова отправляю учетные данные пользователя при выполнении «аутентифицированного» запроса. Это заставило сервер игнорировать токен и вернуть неавторизованный ответ 401.

    Таким образом, исправление заключалось в удалении следующей строки из моего «аутентифицированного запроса».

    httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("test-user@example.com", "Password!"), "UTF-8", false));

    Чтобы быть ясным, эта строка по-прежнему необходима для первого запроса.

    Intereting Posts