Ошибка 401 При попытке обновить статус с Twitter4J
-
30-09-2019 - |
Вопрос
Я пытаюсь обновить статус в Twitter, используя Twitter4J. Все отлично работает на localhost, но когда я пытаюсь сделать это на сервере, я получаю ошибку авторизации:
401: учетные данные аутентификации отсутствовали или неверны. {«Ошибка»: «Неверный / используемый Nonce», «Запрос»: « / 1 / States /uppdate.json»} TwitterException {ExcectionCodeCode = [15BB6564-00E4D61F], StatusCode = 401, RectryAfter = 0, RatelimitStatus = null, версия = 2.1.7-Snapshot (сборка: 6498F401635AACF3388891CC5140B2086FF3F8AA)}
Я сгенерировал токен доступа для пользователя, используя метод «PIN» на localhost. Я думаю, что это не должно иметь значения, где он был сгенерирован, accessToken.getToken()
а также accessToken.getTokenSecret()
Значения не должны зависеть от того, какую машину я их бегу, они должны работать где угодно, верно?
Что означает эта ошибка сообщения? Я не понимаю «использовал нон».
ОБНОВИТЬ
Хорошо, что-то действительно испортилось где-то. Я пытаюсь создать токен доступа на сервере сейчас и даже не может сделать его для создания 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 все работает нормально.
Решение
Неделя и несколько серых волос позже оказались, что проблема была в местном времени на сервере, который был выключен. Кто-то сделал отличную работу с ясными сообщениями об ошибках в Twitter.
Другие советы
Nonce - это значение, предназначенное для использования только один раз.
Я предполагаю, что код, который вы используете для генерации NONCE, сэкономит NONCE и пытается повторно использовать его.
Я не знаком с библиотекой Twitter4j, но я бы проверил и убедитесь, что вы генерируете новую нон для каждого запроса.
Для вашего «401: учетные данные аутентификации отсутствовали или неверные» ошибки. Убедитесь, что вы также включите PIN-код верификатора с запросом как часть базы подписи.