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
日本語が表示されず。
…使い勝手という面で言うと使えません。はい。