連載
あなたのサイトをOpenID対応にしている2行の意味:OpenIDの仕様と技術(2)(2/3 ページ)
OpenIDが知られるようになり、自分のURLにおいたHTMLヘッダに、link rel="openid.server"……から始まる2行を追加することで、自分のURLをIDとして利用ができる、ということを知っている方も多いかと思います。今回はヘッダに書かれた2行が、OpenIDの仕様ではどのように定義され、利用されているのかを解説します(編集部)
OpenID対応サイトを作る際のユーザビリティ
次はいよいよ、OpenID authentication protocolの内側に迫っていきます。
ConsumerサイトがOpenIDに対応していることをEnd Userに示すために、OpenIDでログインできるフォームに対して、下記のような表示を行うのが望ましいです。
仮に次のようにHTMLを記述したならば、
<form id="openid_form" action="./login.cgi" method="post"> <fieldset> <legend>Enter your OpenID URL</legend> <input type="text" id="openid_url" ≪name="openid_url"≫ value="" /> <input type="submit" id="openid_url_submit" name="openid_url_submit" value="LOGIN" /> </fieldset> </form>
textフィールドに対するスタイルを下記のようにして、OpenIDのロゴを表示するようにします。
input#openid_url { text-indent: 18px; background-image: url("http://sample.openid-idp.com/img/openid_logo.png"); background-repeat: no-repeat; background-position: left center; }
また、ブラウザのオートコンプリートを利用するため、OpenIDに対応するConsumerサイトのフォームフィールドではname属性値にopenid_urlと統一した名前を付けることが推奨されています。
OpenIDでの認証手続きの流れ
さて、具体的にOpenIDによる認証手続きの流れを追っていきましょう。まず初めに全体の流れを列挙します。
- ConsumerはEnd Userから送られてきたClaimed IdentifierにあるHTML文書を実際にパースし、openid.delegateが存在すれば適切に処理しつつ、openid.serverの値、すなわちIdPのエンドポイントURLを入手します。
- ConsumerはIdPとの間で、Claimed Identifierの認証手続きを行う前に、手続きの仕方をsmart modeかdumb modeのいずれかから選ぶことができます【注2】。
smart modeとは、事前にConsumerとIdPの間で共通鍵を共有し、信頼関係を成立させておくモードです。
一方、dumb modeは事前に共通鍵を共有することなく、Claimed Identifierの認証手続きを行いますが、smart modeと比べて一連の手続きの最後に1つ余計に処理が増えます。
- ConsumerはEnd UserのUser-Agentを特定のクエリーパラメータを付与したIdPのエンドポイントURLに対してリダイレクトさせます。
ここでもIdPに対する問い合わせが2通りあります。Ajaxスタイルの非同期通信による問い合わせ方式と、実際に画面が遷移しユーザーが都度必要ならばIdPの認証手続きページにおいて、ログインしたり情報の開示の可否を選択できる方式です。
いずれの手続きも正しく完了した場合、IdPは事前にConsumerが指定したURLにEnd UserのUser-Agentをリダイレクトさせます。 - ConsumerはEnd UserのUser-Agent経由で受け取ったIdPからのレスポンスを受け取ります。
ここで最初にdumb modeを選択していた場合は、受け取ったデータの妥当性をConsumerは直接IdPに問い合わせます。
これらをまとめると、
- Consumerは、smart modeとdumb modeという、ConsumerとIdP間で事前に信頼関係を結ぶか否かで変わる2つのモードを選択できる。
- Ajaxスタイルの問い合わせと、画面遷移する問い合わせの2パターンが用意されている。
となります。
一連の認証手続きはIdPのエンドポイントURLに対して、フェイズに応じたopenid.modeという識別子の値を変えてリクエストをやりとりすることによって行われていきます。
Copyright © ITmedia, Inc. All Rights Reserved.