|
Consumerの仕組みについてもう少し詳しくみてみよう さて、駆け足でPHP-OpenIDのConsumerのサンプルを紹介しましたが、その中で出た用語や意味を詳しく解説しておきましょう。 OpenIDは現在、バージョン1.1とバージョン2.0の2つの仕様が存在しています。バージョン2.0の最終仕様は2007年12月5日に公開されたばかりで、利用できる暗号化方法の選択肢の拡張をはじめ、いくつかの手順やパラメータの名前、用語などが変更されています。 例えば本記事では「Consumer」「IdP(Identity Provider)」という言葉を使っていますが、バージョン2では「Relying Party(RP)」および「OpenID Provider(OP)」に変更されました。認証対象となるルートURLである「openid.trust_root」は「openid.realm」に変更になっています。 ただし、ConsumerやIdPという言葉は、PHP-OpenIDのライブラリの中でも使われているため、本記事ではバージョン1.1での呼び方に統一しています。なお、バージョン2のドキュメントを読む際には、上記の新しい呼び方で書かれているので、注意が必要です。 バージョン2はまだ公開されたばかりで、それを実装しているIdP(OP)もまだほとんどありません。しかし今後は、そうしたIdPも増えてくるでしょう。ちなみにOpenID-PHPは、バージョン1.1と2.0のどちらも利用できるようになっています。今回はバーション2について詳しくは述べませんが、興味のある方はOpenIDの公式サイト(http://openid.net/)の仕様書をご覧ください。 OpenIDでは、1度の認証の間にエンドユーザとConsumer、IdPの3つのコンピュータの間で、何回ものやり取りが行われます。すべてのやり取りはHTTPプロトコルに則り、POSTもしくはGETリクエストによって行われます。例えばクエリパラメータやPOSTの場合は、データの名前と実際のデータの内容というペアで、メッセージボディに格納されています。名前はすべて「openid.」ではじまります。 サンプルとして、IdPへConsumerからリダイレクトされた場合のURLをみてみます(リスト1)。
リスト1:IdPへConsumerからリダイレクトされた場合のURL
http://www.openid.ne.jp/user/auth?openid.assoc_handle=%7BHMAC-SHA1%
データ量が多くわかり辛いですが、「openid.assoc_handle」や「openid.identity」「openid.return_to」「openid.trust_root」などのパラメータがURLに含まれているのがわかるでしょう。openid.identityは、エンドユーザーが送ってきたIdentifierのURLが入っています。openid.assoc_handleは「アソシエーションハンドル」です。これはすでに解説しましたが、ConsumerとIdPの間でのやり取りの際にリレーの「たすき」のように必ずつけて送られるデータです。 また、openid.modeというデータもあり、上記の例ではcheckid_setupというデータが入っています。これは「checkid_setup」というモードでIdPの認証処理を行う、ということを指定したものです。これは、今回のサンプルのように、リダイレクトなどを用いてIdPのWebサイトに誘導され、そこで認証処理が行われる方法です。さらに「checkid_immediate」というモードでは、JavaScriptなどを使って画面遷移せずに認証を終えることができます。 通常IdPは、WebブラウザからのアクセスをCookieなどを使用して状態を判別する、独自のログインシステムを備えています。渡されたIdentifier URLと、ログインしているユーザが一致すれば、「読み取りを許可しますか?」といったメッセージを表示します。しかしログインしてなければ、ログインを促し、ユーザが違えばエラーやユーザ名切り替え画面を表示します。 このあたりの挙動はIdPに一任されています。例えばユーザ情報が一致すれば特に確認画面を表示せず、「認証成功」と見なしてConsumerにリダイレクトをしてしまうIdPも存在します。 さて、次回はIdPのより詳しい仕組みや実装方法について、実際にサンプルを使って解説します。 |
||||||||||
|
前のページ 1 2 3 |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
||||||||||
|
|
||||||||||
|
||||||||||
|
|
||||||||||
|
||||||||||


