ようやく、問題点を発見しました。OpenPNEのバグでした。公式SNSで一応レポートしておいたけれど、コレしかバグがなくてもすぐリリースするよ、というのとは開発体制が違うので、すぐには反映されないでしょうけれど、明らかすぎるバグなので、キット直してはもらえるでしょう。
署名の生成に問題があるのは間違いなくて、これが OpenPNE側なのか、libopkele側なのか、で両側から追いかけていったのです。すると、署名する直前のデータは完全に一致。ならば、同じアルゴリズムを使っている以上同じ署名が出るべきなのに、これが出てこない。
と、OpenPNE側の署名生成を見ると、return hash_hmac(‘sha256’, $key, $text, true) とかって書いてある。PHPのリファレンスを参照すると、これは string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output= false ] ) であると、書かれている。はい、鍵とデータが逆ですね oTL
ということで、OpenPNE側の呼び出しを、hash_hmac(‘sha256’, $text, $key, true)に直しただけで、あっさりと、認証をパスしてくれました。ファイルは lib/include/Auth/OpenID/HMACSHA1.php の中です。hash_hmacで探せばすぐに見つかるでしょう。同じ問題でお困りの方はご参考までに。
なお、libopkeleは 2.0.3以降にされることをオススメします。2.0.2以前では、IDが一桁の数字のヒトは認証できませんので。
コメント