4

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

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

curl http://localhost:3000/api/api_keys -u '[email protected]: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("[email protected]", "Password!"), "UTF-8", false)); 
httpGet.addHeader("Authorization", "Token token=\"" + getToken() + "\""); 

try { 
    HttpResponse response = client.execute(httpGet); 
... 

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

ответ

0

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

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

httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("[email protected]", "Password!"), "UTF-8", false));

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

0

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

Смежные вопросы