0

OAuth 1.0のOAuth リクエスト ボディ ハッシュ拡張機能は、フォーム エンコードされていないリクエスト ボディを送信するコンシューマーが、oauth_body_hash パラメータとして署名ベース文字列にリクエスト ボディの SHA1 ハッシュを含める必要があることを指定します。Signpost にはこの拡張機能のサポートが組み込まれていませんが、接続しているサービスにはそれが必要です。リクエストにパラメータを追加するにはどうすればよいですか?

4

1 に答える 1

1

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")+"\"");
于 2015-01-28T23:59:56.603 に答える