IdPを立ててみよう
「第2回:PHPで作ろうConsumer」では、PHP-OpenIDのサンプルを利用して、Consumerを作成しました。今回は引き続き「Identity Provider(以下、IdP)」を作成します。OpenIDはオープンな規格のため、自分でIdPを立ち上げることも可能なのです。
前回利用したPHP-OpenIDのバージョン2にもIdPのサンプルは含まれていますが、OpenID 2.0を使う仕様となっています。OpenID 2.0は現時点で仕様が決まったばかりであり、クライアントの中には非対応のものも存在しています。このため、今回はPHP-OpenID 1.0系のライブラリを使ったサンプルにて解説を行います。PHP-OpenID 1.0系のライブラリの現時点での最新版は1.2.3です。配布元(http://www.openidenabled.com/php-openid/)からダウンロードしてください。
IdPの立ち上げに必要なのは「examples」に収められた「server」ディレクトリと、ライブラリが格納されている「Auth」および「Sercvices」ディレクトリの3つです(PHP-OpenID 2.XではServicesディレクトリはAuthに統合されていました)。なお、後述するserver.phpが動作するために「GMP(http://gmplib.org/)」ライブラリが必要なため、PHPのインストール時に「--with-gmp」を指定し、PHPからもこのライブラリが使えるようにしておく必要があります。
IdPはConsumerと違い、ただファイルをサーバ上にコピーしただけでは使えず、設定ファイル「config.php」を用意する必要があります。サンプルにはconfig.phpを自動生成するための「setup.php」が付属しています。Webブラウザからsetup.phpにアクセスし、サーバのURL(サンプル中のserver.phpを置く場所)と、データ保存方式(ファイルに保存するか、MySQLなどのデータベースか)、さらに作成するユーザのIdentifier URLとパスワードをそれぞれ指定することでconfig.phpを生成・表示できます。
図1:config.php作成の流れ
(画像をクリックすると別ウィンドウに拡大図を表示します)
このIdentifier URLとパスワードのセットは複数設定可能で、IdPに必要なログイン/ログアウトシステムを提供します。あらかじめ、テストに利用するIdentifier URLを決め、同時にパスワードを設定しておきましょう。
最後に「Generate Configuration」ボタンを押すと、PHPのコードが生成されます。これを「config.php」という名前でコピーして、server.phpと同じディレクトリに保存しておきます。
server.phpに直接アクセスすると、Identifier URLに埋め込むべきlink要素とcheck用のログインフォームが表示されるので、これらをIdentifier URLに記述しておきます。さらに、右上の「Log In」リンクからログイン画面にアクセスし、先ほどsetup.phpで指定したIdentifier URLとパスワードを入力します。ログインが完了すると画面上部にログインしているIdentifier URLが表示されます。
このIdPを利用して、ログインをしてみましょう。例えばOpenID関連のサイトを集めているディレクトリサービス
「OpenIDDirectory(http://openiddirectory.com/)」にログインしてみます。
ログインアカウントとして、準備しておいたIdentifier URLを入力すると、IdPの「Trust This Site」というページにアクセスします。ここで、「Confirm」をクリックすると、ログインが行われるはずです。もし、サーバ側でログインをしていなかった場合は、ログインページが表示されます(setup.phpで設定したIdentifirer URLとパスワードでログインします)。
「Trust This Site」で、「Remember this decision」というチェックボックスにチェックを入れてから「Confirm」を行った場合、その情報は保持され、次回からこのサイトのログイン時には「Trust This Site」の確認画面は出なくなります。そして、その情報は、サーバのURLに直接アクセスした際に上部に表示される「Remembered Sites」というリンクをクリックすれば、その一覧を表示したり、情報を削除することができます。
このように、サンプルにはこれまでおそらく皆さんもみたことのある、IdPの基本的な機能が用意されています。 次のページ