OpenID 2.0 で setup_needed が返ってきたときにどうすればいいか
昨日の記事で、OpenID 1.1 の際にsetup_neededを返す場合にはuser_setup_urlを返せばいいんだよっていうのをid:ZIGOROuさんから教えてもらったのですが、OpenID 2.0 でsetup_neededが返ってきた場合にはuser_setup_urlがないのでどうしたらいいのかがわかりません。
と思ったのですが下記のURLの説明を見ると、その場合にはRPは「checkid_setupモードでやりなおすべきである」って書いてありました。
でも自信がない…。この理解で合ってるんだろうか…。
http://openid.net/specs/openid-authentication-2_0.html#rfc.section.10.2
もしそうであれば、Net::OpenID::ServerのSYNOPSISは下のようにuser_setup_urlが取れなかった場合のsetup_needed modeの際にcheckid_setupをやりなおす分岐を示してやるべき(だと思うんだですがどうでしょう)。
if (my $setup_url = $csr->user_setup_url) { # redirect/link/popup user to $setup_url } elsif ($csr->message->mode eq 'setup_needed') { # re-construct checkid_setup mode } elsif ($csr->user_cancel) { # restore web app state to prior to check_url } elsif (my $vident = $csr->verified_identity) { my $verified_url = $vident->url; print "You are $verified_url !"; } else { die "Error validating identity: " . $csr->err; }
ちなみに、mixiなどはOpenID 2.0でcheckid_immediateしても、setup_neededとuser_setup_urlが返ってくることから、おそらくNet::OpenID::Serverのバージョン1.1を使ってるんじゃまいか(あくまで予想)。