Hatena::ブログ(Diary)

”><xmp>TokuLog 改メ tokuhirom’s blog このページをアンテナに追加 RSSフィード

Net::OpenID::Consumer::Lite を書いてみた

http://svn.coderepos.org/share/lang/perl/Net-OpenID-Consumer-Lite/trunk/

PerlOpenID を利用する場合、Net::OpenID::Consumer というモジュールがあって、これをつかえば簡単に OpenIDクライアントを実装できて便利。

Net::OpenID::Consumer は Crypt::DH依存している。この Crypt::DH というのが曲者で、これは Diffie-Hellman 秘密鍵交換というのをやるのにつかっているモジュールなのだが、この計算には多倍長整数演算が必要で、そのために Math::BigInt::GMP/Math::BigInt::Pari あたりが必要。これらのモジュールはもちろん XS でその上外部ライブラリ依存しており、インストールが結構めんどう。しかもこれらのモジュールを先にインストールしておかないと Math::BigInt の pure perl 版をつかってしまうため死ぬほど遅くてサーバが軽く死ぬ(某社では本番のサーバにだけ GMP がはいってなくてくそ重くなったという報告があります)。Crypt::DH 自体の高速化としてCrypt::DH::GMP というモジュールがあってこれはすばらしいハックです。

などと、おもっていたんですが、

といったところで、良質な OpenID認証サーバだけを対象にした、軽量な OpenIDクライアントライブラリを書いてみた。

依存が LWP と URI にしかないので、CGI とかでも簡単につかえるし、一般的なサービスでも導入しやすくて便利だとおもいます。

使い方は下記のような感じで。

    use Net::OpenID::Consumer::Lite;

    my $check_url = Net::OpenID::Consumer::Lite->check_url(
         'https://mixi.jp/openid_server.pl', # OpenID Server URL
         'http://example.com/back_to_here'   # かえってくる URL
    );

    Net::OpenID::Consumer::Lite->handle_server_response($request,
        not_openid => sub {
            die "Not an OpenID message";
        },
        setup_required => sub {
            my $setup_url = shift;
            # Redirect the user to $setup_url
        },
        cancelled => sub {
            # Do something appropriate when the user hits "cancel" at the OP
        },
        verified => sub {
            my $vident = shift;
            # Do something with the VerifiedIdentity object $vident
        },
        error => sub {
            my $err = shift;
            die($err);
        },
    );

実際のところ、自分OpenID についてはそんなに詳しいわけではないので、識者のレビューを求む。具体的にいうと id:zigorou さんとか id:zigorou さんとか id:zigorou さんとか。

【追記】

id:ZIGOROu さんからレビューいただきました。

http://d.hatena.ne.jp/ZIGOROu/20081201/1228102667

id:miyagawa さんからもご指摘いただきましたが、このモジュールは 「mixi認証livedoor 認証を同じプロトコル/ライブラリで扱える」ということが主眼です。

identification の用途では使えませんし、いくつかの重要な機能をそぎおとしてあります。また、フルスペックライブラリが必要ならすでにフルスペックライブラリがあるので、そちらをご利用ください。

このモジュールは、OpenID を利用し、限定した OP を対象として、簡易的な認証を行うものです。OpenID の機能をフルに使うことはできません。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証