2015-01-28 3 views
0

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

ответ

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")+"\"");