OAuth 1.0的OAuth 请求正文哈希扩展指定发送非格式编码请求正文的消费者应在签名基本字符串中包含请求正文的 SHA1 哈希作为 oauth_body_hash 参数。路标没有对此扩展的内置支持,但我连接的服务需要它。如何将参数添加到我的请求中?
user69173
问问题
1205 次
1 回答
1
路标 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")+"\"");
于 2015-01-28T23:59:56.603 回答