TOP情報セキュリティ> 第4回:OpenIDの仕様を改めて復習してみよう (2/3)

使って広がるOpenIDの輪

使って広がるOpenIDの輪

第4回:OpenIDの仕様を改めて復習してみよう

著者:はてな  水野 貴明

公開日:2008/1/9(水)

checkid_immediateを利用したConsumerを作成する

第2回:PHPで作ろうConsumer」で紹介したサンプルでは、認証時にページ遷移を必要とする「checkid_setup」を利用しています。ここではサンプルを改造し、ページ遷移を行わない「checkid_immediate」を利用したスタイルに変更してみます。

サンプルコードダウンロード
ZIPファイル consumer_sample.zip (ZIPファイル/1MB)

「checkid_immediate」を利用する場合、Identifier URLが入力され、「login」ボタンが押されたところでJavaScriptを利用したIFRAME生成とConsumer、IdPの呼び出し、さらに認証作業が行われます。

改造した「index.php」では、「login」ボタンを押すとJavaScriptのauthという関数が呼び出されます。指定されたIdentifier URLを基にアクセスするURLとIFRAMEを生成します。なおこのIFRAMEは非表示にしたDIVの中にセットされるため表示されません。IFRAMEのsrc属性にアクセスするURLがセットされ、結果としてIFRAMEの中で、Consumer(やIdP)へのアクセスが行われるのです。

実際の認証作業が行われる「try_auth.php」では、「checkid_setup」の代わりに、「checkid_immediate」を使うように変更する必要があります。変更点は「$redirect_url = $auth_request->redirectURL(getTrustRoot(),getReturnTo(),true);」と「$form_html = $auth_request->formMarkup(getTrustRoot(), getReturnTo(),true, array('id' => $form_id));」の2箇所で、それぞれOpenID 1.1とOpenID 2.0を利用する部分に「true」をセットします。

ログイン時の流れ
図2:ログイン時の流れ

またサンプルのメッセージ表示には「index.php」を再利用しています。ただし、内容をIFRAMEの中に埋め込むため、メッセージの表示部分を「message.php」というページに切り出して利用しています。「common.php」と「finish_auth.php」の中でindex.phpが呼び出されているため、該当箇所を「message.php」に変更します。

「finish_php」では、認証が成功した際に$is_completeという変数をセットします。さらに$name変数にIdentifier URLをセットします。message.phpでは$is_complete変数がセットされている場合に認証が終了したものとみなし、親ドキュメント(index.php)の「finish_auth」メソッドを呼び出します。その際、$nameの内容を引数として渡します。

引数が渡されたfinish_authは、「認証に成功したIdentifier URLである」とみなして引数の内容を表示します。もし引数がなければ失敗と見なし「needSetup」というメッセージを表示します。

なおfinish_auth.phpでは、OpenID_Auth_Consumerのcompleteメソッドが返すオブジェクトのstatusプロパティをチェックして認証の成功/失敗を判定していますが、そこに「Auth_OpenID_SETUP_NEEDED」というステータスの判定を追加しておく必要があります。これは、すでに述べているように「checkid_immediate」では、認証に失敗したときに「checkid_setupでの認証が必要」というステータスが返ってくるからです。

サンプルをサーバに設置したら、取得済みのOpenIDのアカウントを利用してテストしてみましょう。ただし、IdPによっては「checkid_immediate」に対応していないケースもあるため、利用するIdPに注意してください。checkid_immediateに対応したものとして「vox(http://vox.com/)」などのアカウントがあげられます。

今回紹介したサンプルは非常にシンプルなため、実際にConsumerとして実装する場合には、受け取った認証情報からクッキーを発行したり、認証情報を基に受け取ったページの内容を書き換えるなど、さまざまな肉付けが必要です。 次のページ


前のページ  1  2  3  次のページ


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


INDEX
第4回:OpenIDの仕様を改めて復習してみよう
  OpenIDの仕様を改めて復習してみよう
checkid_immediateを利用したConsumerを作成する
  OpenID 2.0