日向夏特殊応援部隊

俺様向けメモ

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

id:tokuhiromhttp://d.hatena.ne.jp/tokuhirom/20081129/1227923235 の件。元の Lite たる趣旨とかも考慮に入れた上での話だけど凄い良いと思いました。

追記 (2008-12-01T12:51:35+09:00)

Net::OpenID::Consumer::Lite の件ですけど、限定的な手段しか提供していないと言う点に注意は払うべきです。

  • This module supports OpenID 2.0 only.
  • This module supports SSL OPs only.
  • This module doesn't care the XRDS Location. Please pass me the real OpenID server path.

えーっと正しく言うと、

  • OP Identifier のみ対応、つまり User-Supplied Identifier じゃない
  • OP Endpoint URL は既知である必要がある。つまり discovery はしない *1
  • SSL オンリー
  • 署名検証の為の association をサポートしない
  • XRI もサポートしない

かな、まだあるかもですが。なので OpenID 2.0 only は消すべきかな。

IRC にて id:miyagawa さんから、

  • identification としての OpenID が軽視傾向にある?(認証目的のみの使われ方が増えてきた)
  • で、authentication に使えればいいからフルスペックで対応しなくていいや

みたいな流れが出来てるのはどうか的な趣旨の突っ込みがあり。僕も同意でしたので言葉足らずかと思って追記してみました。

今回の Net::OpenID::Consumer::Lite に限っては暗に、シンプルな CGI として気軽に使える認証の枠組みとして最低限の実装と言うことが根底にあるので、その趣旨での「素晴らしい」と言う意味で、然るべきサービスを提供する際には、それなりに考えなければいけないこともあるんだと言うことを考慮の上で、以下の文章に続きます。

追記2 (2008-12-01T14:29:09+09:00)

あと"良い OP"ってフレーズあったけど、

  • SSL使ってて
  • OP Identifier 使ってて
  • 認知度が高い

ってのがここでは暗に良い物だと言う前提がありそうです。

(追記終わり)

SSL に対応してない認証サーバなんて、つかわない方がいい

その通り。だから Crypt::DH とか外せるってのは妥当な判断。

OpenID 2.0 前提で

正しく言うなら OP Identifier のみでって事ですよね。OP の現状考えたら、それで十分だと思いました。

check_authentication 前提で

まぁどうせ mixi がそうならざるを得ないのでw

XRDS の detect とか無駄じゃない?

最初、ここはどうかなと思ったんだけど、

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

なんで、なるほどそこも決め打ちでも構わないのかーと妙に納得した。
現時点で結果的にホワイトリストになっちゃってるし、ミニマムに要件を満たすと言う観点から見て、素晴らしいと思いました。

コードの話

checkid_immediate が決め打ちになってるのがちょっと嫌かも。この部分が選択出来たらいいなーと思いました。

sub check_url {
    my ($class, $server_url, $return_to, $extensions) = (shift, shift, shift, shift);
    Carp::croak("missing params")      unless $return_to;
    Carp::croak("this module supports only https: $server_url") unless $server_url =~ /^https/;

    my $url = URI->new($server_url);
    my %args = (
        'openid.mode' => 'checkid_immediate',
        'openid.return_to' => $return_to,
    );

この辺りの話ね。

と言うのも僕の場合はほとんどのケースで恒久的にログインする設定にしないので、なんだけど多くの場合はそうするユースケースのが多いのかなぁ。

だからやっぱり問題にならないかも。

と言う訳で特に突っ込みどころが無かったと言うのがまとめでした。

*1:ここって XRDS だけじゃなくて HTML based discovery もケアしてないので discovery をサポートしてないが正しいハズ