OAuth Request Body Hash extension к OAuth 1.0 указывает, что потребители, отправляющие тела запроса без формы, должны включать в себя символ SHA1 тела запроса в строке подписи подписи как параметр oauth_body_hash. Signpost не поддерживает встроенную поддержку этого расширения, но для этого требуется сервис, к которому я подключаюсь. Как добавить параметр в мой запрос?Как я могу отправить oauth_body_hash с помощью Signpost?
0
A
ответ
0
Знаки указателей OAuthConsumer предоставляют метод setAdditionalParameters. Просто вычислите хэш и добавьте параметр самостоятельно. Единственное осложнение состоит в том, что эти параметры не являются процентными экранами от Signpost, как указано в OAuth Parameter Encoding, поэтому вам нужно будет сделать это самостоятельно. Вот пример:
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")+"\"");