使って広がるOpenIDの輪
第1回:2行で簡単Identifierをはじめよう
著者:はてな 水野 貴明
公開日:2007/12/6(木)
自分のblogのURLをIdentifierにしてみよう
はてなやLivedoorなどでアカウントを持っていれば、自分用のIdentifierのURLを持つことは簡単です。ただし、これらのURLはあまり普段なじみのあるものではなく、愛着がわきづらいものです。そこでOpenIDには「delegate」という仕組みが用意されており、それを利用することで、他のURLをIdentifierとして利用することができるのです。
まず一例として、OpenIDのログインの仕組みを理解するために「delegate」を利用し、自分のblogをOpenIDのIdentifierにしてみます。これなら「自分のIdentifierはこれです」と胸を張って主張できそうです。
IdPとして今回は「Openid.ne.jp(http://www.openid.ne.jp/)」を利用してみましょう。これは、登録すると自分用のIdentifier URLを1つ用意してもらえるサービスで、いわば「OpenIDでログインできる」だけの機能を持ったアカウントを提供してくれるわけです。
Openid.ne.jpのアカウントを取得したら、「マイページ」と呼ばれるページにアクセスすることができます。これが、Openid.ne.jpが用意するIdentifierになります。これをそのまま使ってもいいのですが、自分のblogのURLをIdentifierにするには、ちょっとした作業が必要です。
とは言っても、その作業は非常に簡単で、Identifierとして利用したいblogのトップページのHTMLのヘッダ(HEAD要素内)に「<link rel="openid.server" href="http://www.openid.ne.jp/user/auth">」と「<link rel="openid.delegate" href="http://nanzou.openid.ne.jp/">」の2つを含めるだけです。
図3:自分のblogをIdentifierにする
(画像をクリックすると別ウィンドウに拡大図を表示します)
OpenIDでは、Identifierとして指定されたページに「openid.delegate」というrel要素を持ったLINK要素があると、IdPにアクセスする際に、そちらのURLをIdentifierとしてあつかってIdPに問い合わせてくれます。「delegate」は「委譲」という意味で、「このURLはOpenIDのIdentifierだけれど、IdPへの問い合わせはこっちをIdentifierとしてあつかってほしい」というリクエストが可能になります。
この仕組みを使って自分のblogをIdentifierにして、OpenIDに対応しているさまざまなサービスにアクセスしてみてください。また、その際にOpenid.ne.jpにログインした状態、ログオフ状態、さらに可能ならほかのアカウントでログインした状態にするなどして、OpenIDでのログインが、どんなときにどのような振る舞いをするのかを確かめてください。
OpenIDにできること
OpenIDはIdPに対して「現在Webブラウザでアクセスをしてきている人が、指定したIdentifierであらわされるユーザと同一人物か」を示すものです。しかし、それ以上でも、それ以下でもありません。その人の人となりを保証するものではないのです。例えば、はてなやlivedoorのIdentifierでログインをした人は、そのサービスにアカウントを持っている、ということしかわかりません。
とはいえ「あるサービスを○○というアカウントで使っている人である」といったような個人の特定は可能なので、ユーザごとに情報を保持したいケースではユーザを「区別」する場合に便利です。
またサービス提供側としてはOpenIDに対応することで、自分のサービスにアカウント登録をしていない人にもサービスを利用してもらったり、アカウント登録の仕組みそのものを用意せずにユーザ管理が可能になります。
OpenIDのIdPは誰でも実装することができます。たとえば、自分専用のIdPを作ることも可能です。これはConsumerからみると「OpenIDで認証ができたからといって、その人がまっとうな人かどうかすら、まったくわからない」ということでもあるのです。
このため、ConsumerとしてOpenIDに対応しているサービスの中には、AOLやはてなのように、特定のIdPを利用したOpenIDだけに対応する、という「ホワイトリスト」方式を使っているところもあります。
次回は、より技術的な面からみたOpenIDのやり取りの仕組みと、php-openidを使ったConsumerの実装について解説します。