如何使用路标发送oauth_body_hash



OAuth 1.0 的 OAuth 请求正文哈希扩展指定发送非表单编码请求正文的使用者应在签名基字符串中包含请求正文的 SHA1 哈希作为oauth_body_hash参数。Signpost 没有对此扩展的内置支持,但我正在连接的服务需要它。如何将参数添加到我的请求中?

Signpost OAuthConsumer 类提供了一个 setAdditionalParameters 方法。只需计算哈希值并自己添加参数即可。唯一的复杂之处在于,这些参数不会像 OAuth 参数编码指定的那样由 Signpost 进行百分比转义,因此您需要自己执行此操作。下面是一个示例:

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

最新更新