MovableType のコメント欄でも(主にスパム防止のためだけれど)使われているTypeKey 認証を、Perl で書かれた自前 Web アプリケーションから使うための覚書。
ログインに成功すると、あなたの TypeKey アカウントに設定されているニックネームやメールアドレスが表示されますが、 magicvox.net サーバがそのアカウントパスワードを知ることはありません。
https://www.typekey.com/t/typekey/login ?t=yFoWz0asou92Z91kp3yx&v=1.1 &_return=http://www.magicvox.net/archive/2006/src/TypeKey/login.cgi
TypeKey での認証が終わったら _return で指定した URL にリダイレクトされるので、
TypeKey から渡されたクエリ文字列の正当性をチェックします。
チェックのややこしい部分は CPAN で公開されている Authen::TypeKey が全部やってくれます。
かなりお手軽。
#!/usr/bin/perl
;# login.cgi
use strict;
use lib './extlib';
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Authen::TypeKey;
use Data::Dumper;#DEBUG
print "Content-type: text/html; charset=UTF-8
";
print "<h1>TypeKey Login Test with Perl</h1>";
my $q = CGI->new;
;#print '<pre>'. Dumper ($q). '</pre>';#DEBUG
my $tk = Authen::TypeKey->new;
if ($tk) {
$tk->token ('yFoWz0asou92Z91kp3yx');
$tk->skip_expiry_check (0);
$tk->expires (600);
$tk->key_cache ('./typekey.reg');
my $res = $tk->verify ($q);
if ($res) {
;# print '<pre>'. Dumper ($res). '</pre>';#DEBUG
my $name = $res->{name};
my $nick = $res->{nick};
my $email = $res->{email};
my $ts = $res->{ts};
print "name : $name<br />
";
print "nick : $nick<br />
";
print "email : $email<br />
";
print "TypeKey signed at ". localtime ($ts). "<br />
";
print "www.magicvox.net signed at ". localtime (time ()). "<br />
";
}
else {
print "login failed: ". $tk->errstr. "
";
}
}
else {
print "program failed: Authen::TypeKey->new
";
}
print '<p><a href="./">Back to login page</a></p>';<
TypeKey を使ってユーザ ID とパスワードの組み合わせが正しいことが示されただけなので、
登録ユーザか否かのチェック等はサービス側で行う必要があります。
また、ページ毎に TypeKey に問い合わせる訳にもいかないので、
認証された後の Cookie によるセッション管理等はサービス側の責任になります。
アカウントの新規登録やパスワードの再発行などの事務処理が無くなるだけで、
随分と楽チンできそうですけれど。
寄せられたコメント (全 1 件中、最新 5 件まで表示しています)
パスワード入力欄が*しか見えないので複雑なパスワードが入力できず orz
日本語が表示されず。
…使い勝手という面で言うと使えません。はい。