OAuth::Lite の gen_auth_header の罠

とある事情から 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&param1=b&param2=c

の場合、

    %extra = ( param1 => ['a','b'], param2 => ['c'] );

とすればよい。

ああ、すっきりした。

*1:OAuthではパラメータも含めて署名するので