Как я могу отправить oauth_body_hash с помощью Signpost?

расширение хэша тела запроса OAuth для OAuth 1.0. указывает, что потребители, отправляющие тело запроса без кодировки формы, должны включать хэш SHA1 тела запроса в базовую строку подписи в качестве параметра oauth_body_hash. В Signpost нет встроенной поддержки этого расширения, но служба, к которой я подключаюсь, требует этого. Как я могу добавить параметр в свой запрос?


person Community    schedule 28.01.2015    source источник


Ответы (1)


Классы Signpost OAuthConsumer предоставляют метод setAdditionalParameters. Просто рассчитайте хэш и добавьте параметр самостоятельно. Единственная сложность заключается в том, что Signpost не экранирует эти параметры в процентах, как указывает кодирование параметров OAuth. , поэтому вам нужно будет сделать это самостоятельно. Вот пример:

MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(requestBody.getBytes());
byte[] output = Base64.encodeBase64(md.digest());
String hash = new String(output);
HttpParameters parameters = new HttpParameters();
parameters.put("oauth_body_hash", URLEncoder.encode(hash, "UTF-8"));

CommonsHttpOAuthConsumer signer = new CommonsHttpOAuthConsumer(key, secret);
HttpPost request = new HttpPost(url);
request.setHeader("Content-Type", "application/xml");
request.setEntity(new StringEntity(requestBody, "UTF-8"));
signer.setAdditionalParameters(parameters);
signer.sign(request);

Кроме того, вы можете установить заголовок запроса перед подписанием, и Signpost объединит его заголовок с вашим:

request.setHeader("Authorization", "OAuth oauth_body_hash=\""+URLEncoder.encode(hash, "UTF-8")+"\"");
person Community    schedule 28.01.2015