[21] oauth_body_hash
引数は、
payload body のハッシュ値を指定するものです。
[23] OAuth 1.0 本体仕様では application/x-www-form-urlencoded
以外の payload body は署名の計算に反映されないため、replay攻撃が可能となってしまいます。
これを避けたい時に本引数により payload body のハッシュ値を指定することができます。
[24] 本機能は OAuth 1.0 本体に含まれない拡張であり、また HTTPS を採用した OAuth 2.0 が現在普及していることもあり、それほど広く使われてはいません。 しかしクライアントのライブラリーで本機能を使っているものがあり、 無視できない程度には使われているため OAuth 1.0 の鯖は本機能を実装する必要があります。
[3] oauth_signature_method
が HMAC-SHA1
か
RSA-SHA1
なら、 SHA1 を使わなければなりません >>2。
[4] PLAINTEXT
なら、 oauth_body_hash
を使うべきではありません >>2。
[5] それ以外の署名方式を規定する際には、 oauth_body_hash
のハッシュアルゴリズムを規定するべきです >>2。
[6] oauth_body_hash
の値は、 payload body
(なければ空文字列) にハッシュ関数を適用した結果を
RFC 4648 Base64 符号化したものとしなければなりません >>2。
[7] 一時credentials要求やトークン要求には、 oauth_body_hash
引数を含めるべきではありません >>2。
[8] Content-Type: application/x-www-form-urlencoded
の要求には oauth_body_hash
引数を含めてはなりません
>>2。
[9] それ以外の要求には oauth_body_hash
引数を含めるべきです >>2。
oauth_body_hash
引数を含めるべきではありません。仕様は OAuth 1.0 本体に引数を追加するだけなので後方互換性がある >>2
と述べていますが、実際には oauth_signature
引数の署名の計算方法が変わってしまっているため、
クライアントが oauth_body_hash
を送ってきているなら、
鯖も oauth_body_hash
に対応していないと署名不一致のエラーになってしまいます。[13] Content-Type: application/x-www-form-urlencoded
の要求に oauth_body_hash
引数が指定されていれば、
攻撃の可能性があるため、拒絶しなければなりません >>2。
[14] oauth_body_hash
引数を指定するべき場合で含まれていなければ、
相互運用性のためその要求を受け入れても構いませんし、
セキュリティーのため拒絶しても構いません。 >>2
[16] 鯖は、指定された値と計算した値が一致しなければ、 拒絶しなければなりません >>2。
[17] 鯖は、最終的な値を比較するかわりに、 Base64 復号したものを比較しても構いません >>2。
oauth_body_hash
引数を実装していない場合と同じですが、
oauth_body_hash
を送ってくるクライアントからの要求も処理できるという利点があります。oauth_body_hash
引数を指定するクライアントライブラリーが存在していて使われているため、
鯖は最低でも >>20 のような形で oauth_body_hash
引数に対応せざるを得ません。[1] Implementers' Draft: OAuth Request Body Hash 1.0 Draft 1 ( 版) <http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/drafts/1/spec.html>
[25] draft-eaton-oauth-bodyhash-00 - OAuth Request Body Hash ( 版) <https://tools.ietf.org/html/draft-eaton-oauth-bodyhash-00>
oauth_signature
に含まれているためセキュリティー上の問題とならないためとされています >>2。