OpenID 2.0
さて、本連載も最後になりました。最後は「第3回:IdPサンプルでログイン機能を実装」でも少し紹介したOpenIDのバージョン2.0について触れておきましょう。
OpenIDのバージョン 1.1とバージョン2.0では使用される用語が変ったこと以外にも、Identifierのルール拡張などが行われています。バージョン2.0でも1.1と同様に「http:」もしくは「https:」ではじまるURL(URI)をIdentifierにすることも可能ですが、それ以外に「Yadis」と呼ばれるプロトコルを利用できるようになりました。これはOpenIDのIdentifier URLに埋め込まれたlink要素と同様、Webページ内にあるメタ情報を自動取得するための共通規格です。
PHP OpenIDのバージョン2系のServerのサンプルは、OpenID 2.0を利用したものになっています。Identifier URLも用意されるようになっているので、そのURLにアクセスしてそのHTMLをチェックしてみましょう。図のような要素が埋め込まれているはずです。
これがOpenID 2.0のIdentifierのサンプルです。さらに、このlink要素で指定されているURLにアクセスすると、「XRDS(Extensible Resource Descriptor Sequence)」と呼ばれるデータ形式のXMLデータをみることができます。Consumerはこのデータにアクセスすることで、サーバの場所などを知ることができるようになっています。
OpenID 2.0ではこのYadisを利用した方法のほかに、1.1と同じように、link要素でOP(IdP)そのもののURLを指定することができます。しかしXRDSを利用した方が、より多くの情報を含めることができます。例えば上記の例の中に「priority」という記述があることからもわかるように、複数のOPを優先順位をつけた上で指定し、負荷を分散させることが可能になります。

図3:Identifier URLの記述とXRDSで書かれたIdentity
(画像をクリックすると別ウィンドウに拡大図を表示します)
最後に
4回に渡り、OpenIDの仕組みとサンプルを用いた実際の実装について解説してきました。駆け足ではありましたが、OpenIDの仕組みの概要をつかんでいただけたのではないかと思います。
さらに詳しい内容は、英語ではありますが、OpenIDの公式サイト上にある仕様書(http://openid.net/developers/specs/)を参考にしてください。特にOpenID 1.1の仕様書はシンプルで読みやすいので、その基本的な仕組みを理解した上でなら、比較的簡単に読みこなすことができるでしょう。
そこでは、実際のやりとりの詳しいパラメータや暗号化の方法などが述べられています。そしてOpenID 1.1が理解できれば、それを拡張したOpenID 2.0の仕様についても、理解しやすくなるでしょう。
OpenIDは、最初に登場してから2年あまり、最近ようやく注目が集まるようになってきました。しかし、まだ対応しているサービスは少なく、実装のされ方も微妙に違っている部分もあることから、今後どうこれが広まっていくのか、まだよくわからない部分もあるのが現状です。
さらに、誰でも認証サーバ(IdP)を立てることができるため、そのIDをどこまで信頼するのか、自分のサービスの規約に同意しておらず、連絡先さえもわからないかもしれないユーザに対して、どこまでサービスの利用を許可できるのか、といった管理的/法律的な問題もでてきてしまいます。
しかし「1つのIDをさまざまなサービスで使うための共通の規格が存在する」ということは非常に意味のあることです。これからどう広まっていくのか、そこでそれをどう活用していくのか、といった点は、これからも注目すべきトピックだといえるでしょう。