SHOEISHA iD

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

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

Perl Tips

OpenIDを使ってみよう

Perlで理解するOpenIDのしくみ

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

サンプルを動かす

 今回のサンプルを試すのにシックス・アパートの無料ブログサービスVoxを利用したいと思います。VoxはOpenIDをサポートしていますので皆さんのVoxのURLはOpenIDとして利用することができます。

 それではまずは動作の確認をしてみましょう。

  1. サンプルCGIにアクセス(例:http://localhost:8080/cgi-bin/openid-test.cgi)して、入力フォームに自分のVoxのURL(例:yourname.vox.com)を入力してください(http://というプロトコルは必須ではありません)。
  2. ログインボタンを押すと、Voxのログインページが表示されます。
  3. Voxにログインすると、再び「openid-test.cgi」に戻ってきます。
  4. 「openid-test.cgi」はVoxから取得した情報を表示します。

 FOAF、Atomフィード、RSSフィードのURLが表示されましたか?

データの流れを見る

 次にデータの流れを見てみましょう。Firefoxの拡張機能LiveHTTPHeadersなどを使って確認します。紙面の都合上ここにログを掲載しませんが、裏ではサーバといろいろなやり取りが発生していることが分かります。こちらからダウンロードできますので参照してください。

OpenIDの仕組み

 上記のデータの流れを見た結果から、OpenIDの仕組みとしては次のようになります。OpenIDがどのように処理されていくかがよく見えますね。

  1. エンドユーザーは「openid-test.cgi」にアクセスし、ページを表示する。
  2. エンドユーザーはURLを送信する。
  3. 「Net::OpenID::Consumer」の内部で、エンドユーザーから送信されたURLにアクセスし、ページに記述されたmetaタグのopenid.serverへリダイレクトする(今回の例ではVox)。
  4. リダイレクトされた先のサーバ(Vox)は、ログインページを表示する。
  5. エンドユーザーは、VoxにログインするためにVoxのUsername、Passwordを送信する。
  6. Voxで認証が成功すると、Voxはreturn_urlで指定されたURL(今回の例ではopenid-test.cgi)へリダイレクトする。
  7. 認証成功。

 またサンプルからも分かりますように、「Net::OpenID::Consumer」は認証が成功するとOpenIDとして入力されたURLから「FOAF」「Atomフィード」「RSSフィード」を取得してくれます。ちょっとしたSNSサービスが作れそうな予感がしませんか? : )

サンプルのコードを読む

 最後にコードについて補足説明をします。

 「Net::OpenID::Consumer」のnewメソッドは任意のUser Agentモジュールを指定することができます。「Net::OpenID::Consumer」のperldocでは「LWPx::ParanoidAgent」を推奨していますが、「LWP::UserAgent」でも可能です(むしろlocalhostで動作させるのであれば、LWP::UserAgentの方が良いです)。

 コツとしては、OpenID認証でやり取りされるクエリストリングのmodeパラメータを見ればステータスが分かるのですが、あえて自分でステータスが分かるパラメータをクエリストリングにしておくとプログラミングしやすいと思います(サンプルで言うところのverify=1です)。

 「Net::OpenID::Consumer」の約束事は次のとおりです。

  • ユーザーが入力したURLはclaimed_identityメソッドで処理する。
  • check_urlメソッドはOpenIDを認証してくれるサーバ(OpenID Server)へリダイレクトするためのURLを生成してくれる。
  • 正しく認証された場合、verified_identityメソッドでユーザーの情報を取得する。

 今回の利用言語はPerlでしたが、OpenIDのライブラリはPerlのほかにもC#、Ruby、Java、PHPなどさまざまな言語に存在します。Perl以外の言語が得意な方はOpenIDのWikiページにライブラリが掲載されていますので参考にしてみてください。

まとめ

 OpenIDは、Microsoft、AOL、Sun microsystemsなど大手がサポートを表明していますし、technoratiやZooomrなどWeb2.0の代表的なサービスでも利用しています。日本でもサポートしているサービスが徐々に増えています。

 OpenIDのメリットの一つとして、ユーザー情報の多くをOpenIDの提供者にゆだねられるので、OpenIDを利用するサイトはユーザー固有の実装を最小限に抑えることができます。スピーディなサービスの立ち上げなどに一役買うことができそうです。

 皆さんが提供されているサイトやサービスでもOpenIDをサポートしてユーザー層を増やしてみてはいかがでしょうか。またこれから新しくサービスを立ち上げる方もOpenIDの導入を検討されてみてはいかがでしょうか。

付録1:PerlのOpenID事情
 今回の例ではOpenIDの仕様に出てくる用語で表現するとOpenID Consumerのサンプルになります。Perlのウェブアプリケーションフレームワークの一つCatalystのプラグインでCatalyst::Plugin::Authentication::OpenIDCatalyst::Plugin::Authentication::Credential::OpenID などもNet::OpenID::Consumerを利用しています。また、IDの認証そのものを行うOpenID ServerについてはCPANモジュールのNet::OpenID::Serverを使うと良いでしょう。最近ではOpenIDのテスト用モジュール Test::OpenID::ServerTest::OpenID::Consumer も登場していてPerl界隈のOpenID事情もにぎやかです。
付録2:OpenID入力フォーム
 OpenIDの入力フォームにはOpenIDのロゴをつけるようにしましょう。OpenID Authentication 1.1 の 3.2 章でそのことが記載されています。またCSSは次のように定義すると良いでしょう。ロゴの画像は公式ページの画像をダウンロードするのも手かと思います。
= HTML =
Login with your blog URL:<input class="sexy" size="30" />
<input type="submit" value="Login" />
= CSS =
input.sexy {
  background: url(../login-bg.gif) no-repeat;
  background-color: #fff;
  background-position: 0 50%;
  color: #000;
  padding-left: 18px;
}

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング