1

Я пытаюсь обновить статус на twitter с помощью twitter4j. Все отлично работает на локальном хосте, но когда я пытаюсь сделать это на сервере я получаю сообщение об ошибке авторизации:Ошибка 401 при попытке обновить статус с помощью twitter4j

401:Authentication credentials were missing or incorrect. {"error":"Invalid \/ used nonce","request":"\/1\/statuses\/update.json"} TwitterException{exceptionCode=[15bb6564-00e4d61f], statusCode=401, retryAfter=0, rateLimitStatus=null, version=2.1.7-SNAPSHOT(build: 6498f401635aacf3388891cc5140b2086ff3f8aa)}

Я создал маркер доступа для пользователя с помощью метода «PIN» на локальном хосте. Я думаю, что не имеет значения, где он был создан, значения accessToken.getToken() и accessToken.getTokenSecret() не должны зависеть от того, на какой машине я их запускаю, они должны работать в любом месте, правильно?

Что означает это сообщение об ошибке? Я не понимаю «использую nonce» часть.

UPDATE

Хорошо то, что на самом деле где-то перепутались. Я пытаюсь создать маркер доступа на сервере сейчас и не могу даже сделать его для создания URL авторизации для меня:

Twitter twitter = new TwitterFactory().getInstance(); 
twitter.setOAuthConsumer("twitterConsumerKey", "twitterConsumerSecret"); 

RequestToken requestToken = twitter.getOAuthRequestToken(); 
System.out.println(requestToken.getAuthorizationURL()); 

Это терпит неудачу с:

401:Authentication credentials were missing or incorrect. 
Failed to validate oauth signature and token 
TwitterException{exceptionCode=[68a00bf1-d29b9452], statusCode=401, retryAfter=0, rateLimitStatus=null, version=2.1.7-SNAPSHOT(build: 6498f401635aacf3388891cc5140b2086ff3f8aa)} 
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:308) 
     at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:72) 
     at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:103) 
     at twitter4j.http.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:124) 
     at twitter4j.TwitterOAuthSupportBaseImpl.getOAuthRequestToken(TwitterOAuthSupportBaseImpl.java:87) 
     at twitter4j.Twitter.getOAuthRequestToken(Twitter.java:54) 
     at twitter4j.TwitterOAuthSupportBaseImpl.getOAuthRequestToken(TwitterOAuthSupportBaseImpl.java:80) 
     at twitter4j.Twitter.getOAuthRequestToken(Twitter.java:54) 

На LOCALHOST все работает отлично.

+0

Устаревшие, новые люди, пересекающие эту тему: попробуйте этот новый учебник OAuth: http://goo.gl/99vpL – Blundell

+0

Комментарий выше неправильный. Этот вопрос по-прежнему остается в силе, и учебное пособие по OAuth, опубликованное в комментарии выше, не имеет никакого отношения к вопросу здесь. – seinecle

ответ

4

Неделя и несколько седых волос позже выяснилось, что проблема была в локальное время на сервере, который был выключен. Кто-то отлично поработал с четкими сообщениями об ошибках в Twitter.

+0

У меня такая же ошибка. Не могли бы вы объяснить, что делать, чтобы выйти из этой проблемы. –

0

Значение nonce - это значение, предназначенное для использования только один раз.

Я предполагаю, что код, который вы используете для создания nonce, сохраняет nonce и пытается его повторно использовать.

Я не знаком с библиотекой twitter4j, но я бы проверял и удостоверился, что вы генерируете новый nonce для каждого запроса.

0

Для вашей ошибки «401: Учетные данные аутентификации отсутствуют или неверны». Убедитесь, что вы также включили верификатор с запросом в качестве части базы подписи.