PerlでWSSE認証
スクリプトで使ってたけどもう使わなくなった(LWP::Authen::Wsseに任せることにした)ので保存用としてメモしておく。
require Digest::SHA1; require MIME::Base64; require DateTime; # wsse authetication sub get_credentials { my ($user, $pass) = @_; my $sha1 = \&Digest::SHA1::sha1; my $encode_base64 = \&MIME::Base64::encode_base64; my $nonce = $sha1->($sha1->(time() . {} . rand() . $$)); my $now = DateTime->now->iso8601 . 'Z'; my $digest = $encode_base64->($sha1->($nonce . $now . $pass || ''), ''); return sprintf( q(UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"), $user, $digest, $encode_base64->($nonce, ''), $now ); }
使い方
my $req = HTTP::Request->new(GET => "http://d.hatena.ne.jp/tyru/atom/blog"); $req->header('X-WSSE' => get_credentials('tyru', '*******'));