Удаление oauth_token из заголовка запроса в Scribe - PullRequest
3 голосов
/ 13 декабря 2011

Мы пытаемся соединиться с пользовательским API другой компании, который использует двуногий OAuth для аутентификации запроса и отправки нам ответа.

В данный момент код, который мы имеем, отправляет запрос, но он не проходит проверку подлинности на другом конце и, следовательно, отправляет НЕСАНКЦИОНИРОВАННЫЙ ответ.

Шаги, которые мы исследовали до сих пор:

  • Подключено к удаленному сайту с помощью реализации OAuth в python с использованием таких же учетных данных .
  • Попросил другую компанию сравнить наш OAuth-запрос с другим, которому удалось выяснить, отсутствует ли что-либо в нашем.

После второго пункта выше единственное отличие нашего запроса от другого рабочего запроса состоит в том, что параметр oauth_token присутствует в нашем запросе, а не в других. Кроме того, он сказал, что у них есть oauth_body_hash_value в большинстве их запросов, но их нет в наших - хотя они и получают рабочие запросы без него.

Есть ли способ удалить параметр oauth_token в Scribe? Или, всегда ли нужен oauth_body_hash_value? Может ли запрос работать без?

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

Обратите внимание, что TestAPI.class расширяет DefaultAPI10a и просто возвращает "" для всех трех обязательных методов.

public class TestImporter {

  private static final String REQ_URL   = "http://test.com/";

  private static final String KEY         = "KEY";
  private static final String SECRET      = "SECRET";

  // test variables
  private static final String VAR1        = "Test123";

  public static void main(String[] args) {

    OAuthService service = new ServiceBuilder()
                               .provider(TestAPI.class)
                               .apiKey(KEY)
                               .apiSecret(SECRET)
                               .build();
    Token token = new Token("", "");
    OAuthRequest request = new OAuthRequest(Verb.GET, REQ_URL + VAR1 + "/");
    service.signRequest(token, request);
    Response response = request.send();
    System.out.println(response.getBody());

  }

}

Ответы [ 3 ]

5 голосов
/ 15 декабря 2011

Относительно вашего собственного ответа кажется, что вы хотите поместить подпись в строку запроса и не использовать заголовок Authorization .

Это, хотя и допустимоне рекомендуетсяВ любом случае, если вам действительно нужно это сделать, есть способ создать OAuthService для «подписи» в строке запроса:

ServiceBuilder()
  .provider(TestAPI.class)
  .apiKey(KEY)
  .apiSecret(SECRET)
  .signatureType(SignatureType.QueryString)
  .build();
3 голосов
/ 13 декабря 2011

Предполагая, что их реализация не нарушена, не должно иметь значения, что у вас есть дополнительные заголовки OAuth. Сказав это, заголовок oauth_token является , а не необязательным (я предполагаю, что вы общаетесь с использованием OAuth 1.0). Этот заголовок должен содержать токен доступа для пользователя. В вашем примере вы показываете этот токен как пустой, что довольно странно!

Теперь, предполагая, что по какой-то причине допустимо отправлять пустые «имена пользователей» в эту стороннюю систему, вы захотите убедиться, что ваша подпись OAuth совпадает с обеих сторон (вашей и других компаний). Используйте перехватчик протокола для захвата значения заголовка oauth_signature, затем попросите вашего третьего лица проверить, что они генерируют одинаковую подпись. Если нет, то, вероятно, у вас проблема с хэшированием подписи.

0 голосов
/ 14 декабря 2011

Оказывается, когда мы думали, что отправляем полностью сформированный HTTP-запрос GET, мы не были.

Библиотека добавляла всю информацию в заголовок (откуда мы получали информацию от), но без добавления какой-либо oauth-информации в URL запроса.Я могу только предположить, что это связано с нами, используя двухстороннюю авторизацию (отсюда и пустой токен).

Скопировав карту oAuthParameters в queryStringParameters, он затем позволил правильно сформировать URL.

...