Movable Type へAtom API で投稿できるようにするために、WSSE認証について調べた。
簡単にいうと、ダイジェスト認証を片方向でやってしまう、言わば「簡易ダイジェス認証」かな。ダイジェスト認証はOpenSSLを使ってCで書いたことがるので、WSSEでもCで書きたかったが、perlのコードを見つけてしまったので、高速化が必要になるまでこれで代用しよう。
#!/usr/bin/perl use DateTime; use Digest::SHA1 qw (sha1); use MIME::Base64 qw (encode_base64);
my $username = shift or die "need username\n"; my $password = shift; my $nonce = sha1(sha1(time() . {} . rand() . $$)); my $now = DateTime->now->iso8601 . 'Z'; my $digest = encode_base64(sha1($nonce . $now . $password || ''), ''); my $credentials = sprintf(qq(UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s") $username, $digest, encode_base64($nonce, ''), $now);
print $credentials
perlで書くととてもシンプル!禁断の果実だなぁ。
めでたく、Movable Type へサクサクとAtomAPIで投稿、閲覧、更新、削除できるようになったが、「投稿日時を指定日時に設定できない」など、制約があることが判明。なんか技があるのかなぁ。
参考:
・Six Apart : Developer Documentation : TypePad Atom API
・Six Apart Atom Resource Center

