サンプルを動かす
今回のサンプルを試すのにシックス・アパートの無料ブログサービスVoxを利用したいと思います。VoxはOpenIDをサポートしていますので皆さんのVoxのURLはOpenIDとして利用することができます。
それではまずは動作の確認をしてみましょう。
- サンプルCGIにアクセス(例:http://localhost:8080/cgi-bin/openid-test.cgi)して、入力フォームに自分のVoxのURL(例:yourname.vox.com)を入力してください(http://というプロトコルは必須ではありません)。
- ログインボタンを押すと、Voxのログインページが表示されます。
- Voxにログインすると、再び「openid-test.cgi」に戻ってきます。
- 「openid-test.cgi」はVoxから取得した情報を表示します。
FOAF、Atomフィード、RSSフィードのURLが表示されましたか?
データの流れを見る
次にデータの流れを見てみましょう。Firefoxの拡張機能LiveHTTPHeadersなどを使って確認します。紙面の都合上ここにログを掲載しませんが、裏ではサーバといろいろなやり取りが発生していることが分かります。こちらからダウンロードできますので参照してください。
OpenIDの仕組み
上記のデータの流れを見た結果から、OpenIDの仕組みとしては次のようになります。OpenIDがどのように処理されていくかがよく見えますね。
- エンドユーザーは「openid-test.cgi」にアクセスし、ページを表示する。
- エンドユーザーはURLを送信する。
- 「Net::OpenID::Consumer」の内部で、エンドユーザーから送信されたURLにアクセスし、ページに記述された
meta
タグのopenid.serverへリダイレクトする(今回の例ではVox)。 - リダイレクトされた先のサーバ(Vox)は、ログインページを表示する。
- エンドユーザーは、VoxにログインするためにVoxのUsername、Passwordを送信する。
- Voxで認証が成功すると、Voxはreturn_urlで指定されたURL(今回の例ではopenid-test.cgi)へリダイレクトする。
- 認証成功。
またサンプルからも分かりますように、「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の導入を検討されてみてはいかがでしょうか。
Login with your blog URL:<input class="sexy" size="30" /> <input type="submit" value="Login" />
input.sexy { background: url(../login-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; color: #000; padding-left: 18px; }