いままで1.1の仕様では、OPの所在やdelegateしたいIdentifierの指定をHTMLに記述していましたが、これをXRDSというXMLのフォーマットで記述されたものにすることができます。
このXRDS文書の所在をどのようにRPに知らせるかは以下のように2通りの手段があります。
XRDS文書、と簡単に書いてしまいましたが、なにを示した文書なのかは実際に具体例を見た方が早いでしょう。筆者のmyopenid.comにおけるXRDSはこちらにありますが、その内容は下記になります。
<?xml version="1.0" encoding="UTF-8"?> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/phishing-resistant</Type> <Type>http://openid.net/srv/ax/1.0</Type> <URI>http://www.myopenid.com/server</URI> <LocalID>http://zigorou.myopenid.com/</LocalID> </Service> <Service priority="1"> <Type>http://openid.net/signon/1.1</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/phishing-resistant</Type> <Type>http://openid.net/srv/ax/1.0</Type> <URI>http://www.myopenid.com/server</URI> <openid:Delegate>http://zigorou.myopenid.com/</openid:Delegate> </Service> <Service priority="2"> <Type>http://openid.net/signon/1.0</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/phishing-resistant</Type> <Type>http://openid.net/srv/ax/1.0</Type> <URI>http://www.myopenid.com/server</URI> <openid:Delegate>http://zigorou.myopenid.com/</openid:Delegate> </Service> </XRD> </xrds:XRDS>
端的にいってしまえば、
というような仕様になっていますので、このXRDS文書さえあれば複数のURLベースのIdentityサービスを混在させることができます。XRDS文書を用いてURLベースのIdentityサービスを抽象化するプロトコルをYadisプロトコルといい、Yadis1.0という仕様で規定されています。より詳しく知りたい人はYadis 1.0の3、6、7節を読むと良いでしょう。
ここまでの話をまとめてディスカバリーのフローを図解すると次のようになります。
OpenID Authentication 2.0ベースでもdelegateを行いたい方はHTMLに記載すべき情報としてmyopenidのヘルプを見ると分かりやすいでしょう。
こちらにも同様にサンプルを記載しますが、
<head> <link rel="openid.server" href="OpenID 1.1のIdPのエンドポイントURL" /> <link rel="openid.delegate" href="OpenID 1.1のdelegate先のIdentifier URL" /> <link rel="openid2.local_id" href="OpenID 2.0のOP-Local Identifier URL" /> <link rel="openid2.provider" href="OpenID 2.0のOPのエンドポイントURL" /> <meta http-equiv="x-xrds-location" content="XRDS文書のURL" />
のうち、実際に使っているOPに必要なURLの該当する要素に値を記述すれば問題なくdelegateを使うことができます。
さて、最後に少しOpenIDのコミュニティと情報源をご紹介します。
例えば以下のようなコミュニティがあります。
特に国内のOpenIDコミュニティはまだ若く、実際にOP、RPをやろうと考えている方や運用している方同士で意見交換を行ったりするべきだと思っています。興味のある方はぜひご参加ください。
筆者の独断ですが、国内のブログでOpenID関連の話題を取り扱っていて、ためになるブログをいくつかご紹介します。
手前味噌ですが、筆者のブログも最後に付け加えさせていただきました。
次回はOpenID Authentication 2.0をより深く掘り下げる予定です。
山口 徹(やまぐち とおる)
サイボウズ・ラボ株式会社のプログラマー。
バーテンダーからIT業界に転身後、様々なWeb制作を行い、大規模コミュニティサイトの開発・運用を経て、現在は研究開発の日々。Perl使い。
Perlを中心とした開発のノウハウやネタをShibuya Perl Mongersのイベント等で発表するなど講演活動も行う。
個人の開発日記は「Yet Another Hackadelic」、仕事のブログは「log4ZIGOROu」
Copyright © ITmedia, Inc. All Rights Reserved.