とある事情から OAuth::Lite::Consumer の gen_auth_header を使う必要が発生した。
gen_auth_header は、
my $header = $consumer->gen_auth_header($method, $url, { realm => $realm, token => $token, });
という呼び出し形式でOAuthのAuthorizationヘッダを生成するメソッド。
ところが、application/x-www-form-urlencoded なGET/POSTで正しいAuthorizationヘッダを出力してくれないので悩んでいた。だいたい上記の呼び出し形式にはリクエストのパラメータが入っていないのが変だ*1。
で、ソースを見たところ、謎が解けました。実は、
my $header = $consumer->gen_auth_header($method, $url, { realm => $realm, token => $token, extra => \%extra, # これがクセ者 });
が本当の呼び出し形式で、%extra にパラメータを入れてあげればOK。%extraのキーはパラメータ名、値はパラメータ値のリストのリファレンスです。例えば、
param1=a¶m1=b¶m2=c
の場合、
%extra = ( param1 => ['a','b'], param2 => ['c'] );
とすればよい。
ああ、すっきりした。
*1:OAuthではパラメータも含めて署名するので