2015-01-28 7 views
0

OAuth Request Body Hash extension ~ OAuth 1.0은 비 형식 인코딩 요청 본문을 보내는 소비자가 요청 본문의 SHA1 해시를 서명 기반 문자열에 oauth_body_hash 매개 변수로 포함하도록 지정합니다. 푯말에는이 확장 기능에 대한 지원 기능이 내장되어 있지 않지만 연결하려는 서비스에 필요합니다. 요청에 매개 변수를 추가하려면 어떻게합니까?푯말을 사용하여 oauth_body_hash를 보내려면 어떻게해야합니까?

답변

0

표지판 OAuthConsumer 클래스는 setAdditionalParameters 메서드를 제공합니다. 해시를 계산하고 직접 매개 변수를 추가하십시오. 유일한 문제는 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); 

, 당신이 서명하기 전에 요청에 헤더를 설정할 수 있으며 표지판은 자신과의 헤더를 병합합니다 :

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