SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Perl Tips

OpenIDを使ってみよう

Perlで理解するOpenIDのしくみ

  • このエントリーをはてなブックマークに追加

OpenIDは最近非常に注目が高まっている認証技術の一つです。OpenIDを利用したサンプルを通じてOpenIDのメカニズムに触れていきたいと思います。

  • このエントリーをはてなブックマークに追加

はじめに

 OpenIDは最近非常に注目が高まっている認証技術の一つです。ここでは、OpenIDを利用したPerlのサンプルを通じてOpenIDのメカニズムに触れていきたいと思います。

必要な環境

 Perl 5.8以上が動作する環境が良いと思います。基本動作の確認はMac OS Xを利用しました

サンプルの紹介

 早速サンプルコードの「openid-test.cgi」を見ることにしましょう。このサンプルはOpenIDを利用した簡易ログインページです。

openid-test.cgi
#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use Net::OpenID::Consumer;
#use LWPx::ParanoidAgent;
use LWP::UserAgent;

my $query = CGI->new;
$query->charset('utf-8');

my $csr = Net::OpenID::Consumer->new(
    #ua => LWPx::ParanoidAgent->new,
    ua => LWP::UserAgent->new,
    args => $query,
    consumer_secret => sub { $_[0] },
);

if ($query->param('openid-url')) {
    my $claimed_url = $query->param('openid-url');
use Data::Dumper;
    my $identity = $csr->claimed_identity($claimed_url)
        or show_login_form($query, 'wrong identity'.Dumper($csr));
    my $check_url = $identity->check_url(
        return_to  => URI->new($query->url.'?verify=1')->as_string,
        trust_root => $query->url,
    );
    print $query->redirect(-uri => $check_url);
} elsif ($query->param('verify')) {
    if (my $setup_url = $csr->user_setup_url) {
        print $query->redirect(-uri => $setup_url);
    } elsif ($csr->user_cancel) {
        show_login_form($query, 'You\'re cancelled.');
    } elsif (my $identity = $csr->verified_identity) {
        my $user = +{ map { $_ => scalar $identity->$_ }
            qw( url display rss atom foaf declared_rss 
                declared_atom declared_foaf foafmaker ) };
        use Data::Dumper;
        print $query->header, 'logged in!!'."\n"
                              .'<pre>'.Dumper($user).'</pre>';
    } else {
        show_login_form($query);
    }
} else {
    show_login_form($query);
}

sub show_login_form {
    my ($query, $message) = @_;
    $message = $message ? $message
                               = "<p class='error'>$message</p>" : '';
    print $query->header, <<PAGE;
<html>
<head>
<title>login for OpenID</title>
<link rel="stylesheet" type="text/css" href="/css/openid.css" />
</head>
<body>

<h1>Try OpenID</h1>

$message

<form action='openid-test.cgi' method='POST'>
<b>Login with your blog URL:</b>
<input name='openid-url' class='sexy' size='30' value="" />
<input type='submit' value='Login' /><br />
<i>For example: <tt>happygirl.bloghost.com</tt></i>
</form>
</body>
</html>
PAGE
}

 これだけでサンプルの実装は終わりです。とてもシンプルです。CPANモジュール「Net::OpenID::Consumer」が、OpenIDのプロトコルに関する実装を隠蔽してくれますので利用者は最小限のコードを実装するだけです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
サンプルを動かす

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Perl Tips連載記事一覧

もっと読む

この記事の著者

重田 崇嗣(シゲタ タカツグ)

1974年神奈川県生まれ。2006年からシックス・アパート株式会社に勤務。ブログ・サービスTypePadの開発を担当。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1356 2007/06/08 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング