Android Oauth случайным образом возвращает ошибку аутентификации «nonce_used»

1

Я пытаюсь создать приложение Fitbit, и для этого я изменил пример приложения Twitter Oauth, чтобы получить данные из fitbit. Проблема, с которой я столкнулся, заключается в том, что в случайном порядке я получаю следующую ошибку:

12-08 18:36:46.274: W/DefaultRequestDirector(439): Authentication error: Unable to respond to any of these challenges: {oauth=WWW-Authenticate: OAuth realm="http%3A%2F%2Fapp4int.fitbit.com", oauth_problem="nonce_used"}
12-08 18:36:46.284: W/System.err(439): org.apache.http.client.HttpResponseException: Unauthorized
12-08 18:36:46.294: W/System.err(439):  at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
12-08 18:36:46.294: W/System.err(439):  at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
12-08 18:36:46.294: W/System.err(439):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
12-08 18:36:46.294: W/System.err(439):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
12-08 18:36:46.294: W/System.err(439):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
12-08 18:36:46.305: W/System.err(439):  at org.knoesis.healthcare.HealthcareAppActivity$GetCredentialsTask.doInBackground(HealthcareAppActivity.java:149)
12-08 18:36:46.305: W/System.err(439):  at org.knoesis.healthcare.HealthcareAppActivity$GetCredentialsTask.doInBackground(HealthcareAppActivity.java:1)
12-08 18:36:46.305: W/System.err(439):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-08 18:36:46.305: W/System.err(439):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-08 18:36:46.334: W/System.err(439):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-08 18:36:46.444: W/System.err(439):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
12-08 18:36:46.444: W/System.err(439):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
12-08 18:36:46.444: W/System.err(439):  at java.lang.Thread.run(Thread.java:1096)

Какая интересная часть этого является "oauth_problem =" nonce_used ", которую я исследовал, и она говорит" nonce_used: значение oauth_nonce было использовано в предыдущем запросе и, следовательно, теперь не может быть использовано ". Какое значение является значением oauth_nonce и как я могу получить новый?

Дайте мне знать, будет ли полезной публикация кода, о котором идет речь.

Теги:
oauth

1 ответ

2
Лучший ответ

OAuth nonce используется для предотвращения атак воспроизведения, убедившись, что каждый действительный запрос, который вы делаете, может быть принят только один раз.

Прошло некоторое время с тех пор, как я возился с OAuth, но я думаю, что вам просто нужно включить произвольно сгенерированную строку (я думаю, что я использовал время системного времени, связанное с запрошенным именем пользователя, и MD5 хэшировал результат) как nonce для каждого запроса делать. Очевидно, что это необходимо включить в ваш код генерации подписи.

  • 0
    Спасибо, это помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню