OpenIDサンプルでOpenIDの理解を試みる。

OpenIDは今や週刊Asciiで特集が組まれるほどメジャーな存在となった。とりあえず情報をあつめるとこんな感じ。

昨日立ち上げたruby-openidライブラリ付属のOpenIDサンプルアプリを使って、何がどうなってるのか調べてみる。

RPからOPへの転送。

まずはRP側画面にOpenID文字列を入れるところから。

先ほどOPサンプルにログインして得たOpenIDのURL文字列を貼り付け、チェックボックスをすべてチェックせずに進むと、OpenIDのRP->OPという転送が行われる。実際HTTPのやりとりを見てみると以下のようになっていた。(主要部分のみ抜粋)

RP側でOpenIDのURLを入力:
GET /consumer/start?openid_identifier=http%3A%2F%2Fopenid-sample.hoge.co.jp%2Fuser%2Fshimonoakio HTTP/1.1

送信パラメタ

このパラメタは、おそらくOpenIDが定めるものではないような気がする。(要確認)

OPへの要求:
GET /server?openid.assoc_handle=%7BHMAC-SHA1%7D%7B485f33b4%7D%7B2WlJ%2BQ%3D%3D%7D&openid.claimed_id=http%3A%2F%2Fopenid-sample.hoge.co.jp%2Fuser%2Fshimonoakio&openid.identity=http%3A%2F%2Fopenid-sample.hoge.co.jp%2Fuser%2Fshimonoakio&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.realm=http%3A%2F%2Fopenid-sample.hoge.co.jp%2Fconsumer&openid.return_to=http%3A%2F%2Fopenid-sample.hoge.co.jp%2Fconsumer%2Fcomplete HTTP/1.1

送信パラメタ

OPからの応答:
HTTP/1.0 200 OK

結果以下のようにOPの画面に遷移する。

OPでのログイン

ここでYesを選ぶと以下のように元のRP画面にて、OpenIDでログインしたよという旨のメッセージが表示される。