Yahoo!JAPANのOpenIDが急に動かなくなった人へ

PerlでNet::OpenID::Consumer を使ってOpenIDの認証をしてるケースです。

つい先日あたりから(判明したのは今日)、

naive_verify_failed_return

を返してエラーになってしまいます。

なんでか、って延々と調べてたら・・・わかりました。
Need help deciphering this LiveJournal OpenID error

It comes from this line:

        return $self->_fail("naive_verify_failed_return") unless $args{'lifetime'};

So it did a dumb-mode (stateless) check_authentication request to your
server, but wasn’t able to find a “lifetime:\n” row where was
non-zero.

lifetimeがかえってないよー(または返すモードになってないよー)、ってかんじです。
Consumer.pmを再度確認。該当の記述はこちら。

        return $self->_fail("naive_verify_failed_return") unless
            $args{'is_valid'} eq "true" ||  # protocol 1.1
            $args{'lifetime'} > 0;          # DEPRECATED protocol 1.0

はい・・・そういうことです。

早い話が、ローカルに認証用のキャッシュ持たせないとだめっす。
というわけで、オブジェクト作ってるところでキャッシュを作るようにすればOK。

use CGI;
use LWP::UserAgent;
use Net::OpenID::Consumer;
use Cache::File ;

my $csr = Net::OpenID::Consumer->new(
  ua => LWP::UserAgent->new,
  cache => Cache::File->new( cache_root=>'/tmp/opicache',
                             default_expires=>'6000sec'      ) ,
  args => $query,
  consumer_secret => "hogehogehoge" ,
  required_root => "https://example.com/" ,
  minimum_version => 2.0
  );

参考:ソースから読むOpenID (1) – Yet Another Hackadelicなど

Comments are closed.