TOP情報セキュリティ> 第2回:PHPで作ろうConsumer (1/3)

使って広がるOpenIDの輪

使って広がるOpenIDの輪

第2回:PHPで作ろうConsumer

著者:はてな  水野 貴明

公開日:2007/12/13(木)

PHP-OpenIDを使ってみよう

今回は、「Identity Provider(以下、IdP)」の提供するアカウントを利用し、ログイン作業を行う「Consumer」の作成を行いながら、OpenIDの解説を進めていきます。

今回Consumerの作成に使用する言語としてPHPを選びました。実はOpenIDのConsumerやIdPを構築するためのライブラリとして、さまざまな言語向けのものが公開されており、1から構築する必要はありません。

OpenIDの公式サイトである「opdnid.net」にもその一覧
http://wiki.openid.net/Libraries)が公開されてます。複数あるPHP向けのライブラリから、もっとも一般的な「PHP OpenID Library(JanRain PHP OpenID)」を利用してみることにします。

配布元(http://www.openidenabled.com/php-openid/)から、PHP OpenID Libraryをダウンロードするのですが、現在バージョン1とバージョン2の2種類が公開されています。今回は、最近仕様が確定したOpenIDバージョン2に対応しているPHP OpenID Libraryバージョン2を使うことにします。

早速、ライブラリに付属したサンプルを動かしてみましょう。「examples」の中の「consumer」ディレクトリをWebサーバの公開ディレクトリ上に、ライブラリが格納されている「Auth」ディレクトリをアクセス可能な場所(PHPのinclude_pathで指定されている場所、もしくはサンプルを動かすだけならconsumerディレクトリ内にコピーしてしまってもかまいません)に保存します。

用意ができたら「consumer」ディレクトリの中の「index.php」をWebブラウザで開きます。英語のメッセージとともに、入力フォーム付きのWebページが表示されるので、そこにOpenIDのIdentifier URL(前回設定した自分のブログのURLや、はてな、livedoorなど好きなものが利用できます)を入力して「Verify」ボタンを押すとログイン処理が実行されます。

ログイン処理の流れ
図1:ログイン処理の流れ
(画像をクリックすると別ウィンドウに拡大図を表示します)

多くのIdPの場合はログインを許可するかどうかのダイアログが表示され、許可するとログイン状態となり、現在ログイン中のIdentity URLが表示されます。もし、許可しなければ「Verification cancelled.」と表示され、認証に失敗した状態となります。

なお、このサンプルにはログイン状態を保持する仕組みがなく、Webページを閉じると再度ログインする必要があります。継続的にログイン状態を保持したい場合には、情報をサーバ側で保持するとともに、cookieなどを出力してログイン情報とWebブラウザを結びつけます。先ほど実行したサンプルでは使われていませんが、ライブラリには認証情報をデータベースに保存するための仕組みも用意されています。

サンプルのConsumerは、「index.php」と「try_auth.php」「finish_auth.php」「common.php」の4つのファイルから構成されています。

「index.php」はログイン処理を行う入力フォームです。「index.php」にIdentity URLを入力した際のPOST先が「try_auth.php」であり、そこで実際の認証処理を行います。この箇所がOpenIDの認証でもっとも重要な部分です。認証が完了した際の画面は「finish_auth.php」で表示されます。「common.php」はそのすべてからincludeされている共通部分です。

また、Authライブラリの中には、「OpenID」と「Yadis」という2つのディレクトリが存在しています。このうちOpenIDはその名の通り、OpenID関連の処理を行うためのライブラリ本体です。そしてYadisは、OpenIDのIdentifierのように、Webページ上にある識別情報を取得するための共通仕様で、OpenIDのバージョン2における、Identifierの取得に利用されています。

ちなみに、サンプルのindex.phpを表示すると、Identity URLの入力欄の下に「Optionally, request these PAPE policies」と書かれた一連のチェックボックスが表示されます。これは、「OpenID Provider Authentication Policy Extension」と呼ばれるOpenIDの拡張仕様で、認証におけるポリシーを指定できるものです。PAPEの仕様はまだDraft(草稿)ではありますが、PHP-OpenIDはこれに対応しています。 次のページ


1   2  3  次のページ


株式会社はてな 水野 貴明
著者プロフィール
株式会社はてな  水野 貴明
1973年東京生まれ。エンジニア兼技術系ライター。株式会社はてな勤務。近著に「俺流Amazonの作り方」(アスキー)、「詳解RSS〜RSSを利用したサービスの理論と実践」(ディー・アート)など。趣味はラテン音楽と海外旅行と神輿。主な原稿の執筆場所はスターバックスと通勤電車の中。


INDEX
第2回:PHPで作ろうConsumer
PHP-OpenIDを使ってみよう
  サンプルの中身をみる
  Consumerの仕組みについてもう少し詳しくみてみよう