Java twitter OAuth, не удалось проверить подпись oauth

Я пишу код для oauth с помощью twitter, и у меня есть код ошибки 401 и ответ "Не удалось проверить подпись и токен oauth" от twitter, когда я получаю запрос post на < strong>https://api.twitter.com/oauth/request_token. Это мои данные, которые у меня есть:

Consumer/api key    - ffo9MLdRF8XOd9DKB0HeA
Consumer/api secret - fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs
Url callback        - https://oauth.vk.com/blank.html

Мои шаги:

1.Подготовленная строка для создания подписи

POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttps%3A%2F%2Foauth.vk.com%2Fblank.html%26oauth_consumer_key%3Dffo9MLdRF8XOd9DKB0HeA%26oauth_nonce%3Dfb0e9383f0c84326a124dd4ccfddd2d2%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1393951866%26oauth_version%3D1.0

2. Создал подпись qQwIvFao9yeIQpi9ouz0oFi7/v8= по коду:

public String calculateSign(String stringToEncode, String secret) throws Exception{
    byte[] keyBytes = secret.getBytes();
    byte[] text = stringToEncode.getBytes();

    SecretKey secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(secretKey);

    byte[] encoded = mac.doFinal(text);
    return new String(Base64.encode(encoded, Base64.DEFAULT)).trim();
}

3. Окончательный заголовок Authorization (с экранированными кавычками):

OAuth oauth_nonce="fb0e9383f0c84326a124dd4ccfddd2d2", oauth_callback="https%3A%2F%2Foauth.vk.com%2Fblank.html", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1393951866", oauth_consumer_key="ffo9MLdRF8XOd9DKB0HeA", oauth_signature="qQwIvFao9yeIQpi9ouz0oFi7%2Fv8%3D", oauth_version="1.0"

Вопрос к тем, кто может знает как работать с твиттером. Что не так с моими данными? Я могу предоставить дополнительный код, но думаю, что это бесполезно.

P.S. - предоставил рабочие учетные данные, поменяю через 3-4 часа.

UPD: Это мой ключ, который используется в функции calculateSign.

fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs%26

person Vetalll    schedule 05.03.2014    source источник
comment
Может быть разница между временной меткой вашего компьютера и сервера. Хотя я делал это 1,5 года назад, но помню, что столкнулся с такой проблемой. Аутентификация Twitter завершается ошибкой, если разница во времени между сервером и клиентом превышает 1 час.   -  person jsjunkie    schedule 05.03.2014
comment
Кто, можно узнать время сервера для теста?   -  person Vetalll    schedule 05.03.2014
comment
Пожалуйста, проверьте пункты, упомянутые здесь dev.twitter.com/discussions/204   -  person jsjunkie    schedule 05.03.2014


Ответы (1)


Ошибка в базовой строке вашей подписи. URL-адрес обратного вызова должен быть закодирован дважды, поэтому он должен быть:

... &oauth_callback%3Dhttps%253A%252F%252Foauth.vk.com%252Fblank.html ...

Также вам не нужно процентно кодировать символ амперсанда ('&') в ключе подписи, поэтому вы должны использовать:

fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs&

Вы можете проверить свою подпись с помощью онлайновой консоли тестирования OAuth.

person Jon Susiak    schedule 05.03.2014